Como o python encontra seus módulos
Estritamente tomado, um módulo é um único arquivo python, enquanto um pacote é uma pasta contendo arquivos python, acompanhada por um arquivo (pode estar vazio) chamado __init__.py
, para dizer python é um pacote para importar módulos de. Em ambos os casos, os módulos precisam de sua extensão .py
, mas a importação é feita sem (veja mais abaixo).
Por padrão, o Python procura por seus módulos e pacotes em $PYTHONPATH
.
Para descobrir o que está incluído no $ PYTHONPATH, execute o seguinte código em python (3):
import sys
print(sys.path)
Como adicionar um diretório
Ocasionalmente
Dentro de um arquivo python, você pode adicionar caminho (s) ocasionalmente ao caminho padrão, adicionando as seguintes linhas na seção head do seu aplicativo ou script python:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Por exemplo:
se eu tiver uma pasta: /home/myname/pythonfiles
e quiser importar o arquivo module_1.py
, localizado nesse diretório, adiciono isso à seção head do meu código:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
E posso simplesmente importar o arquivo module_1.py
por:
import module_1
Quando eu crio um pacote e quero importar módulo (s) do pacote, eu preciso criar uma pasta em $PYTHONPATH
, contendo os módulos, acompanhados por um (pode ser vazio) arquivo chamado __init__.py
Por exemplo:
Para importar de um pacote (pasta) chamado my_package
in /home/myname/pythonfiles
, adicione o caminho /home/myname/pythonfiles
ao seu $PYTHONPATH
, como no exemplo 1, e importe o módulo chamado module_2.py
(dentro da pasta do pacote ) simplesmente com: '
from <packagename> import module_2
Adicionando diretórios a $PYTHONPATH
permanentemente:
Adicione a seguinte linha ao seu arquivo ~/.profile
.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Subdiretórios
De dentro de um pacote, os subdiretórios não são incluídos assim; você precisa "encadear" os diretórios. Para importar um módulo module_3.py
, dentro da pasta subfolder
dentro da pasta packagename
:
import packagename.subfolder.module_3
Dado o fato de que todas as subpastas do pacote incluem seu próprio arquivo __init__.py
.
Quando um módulo está no mesmo diretório que o script ou aplicativo
Não há necessidade de inserir o caminho para um módulo quando ele está no mesmo diretório do script ou do aplicativo, ele é adicionado automaticamente.
Exemplo:
Se eu tiver uma pasta contendo script.py
e module.py
, posso simplesmente importar o módulo:
import module