Como o python encontra seus módulos
A rigor, um módulo é um único arquivo python, enquanto um pacote é uma pasta que contém arquivos python, acompanhados por um arquivo (pode estar vazio) nomeado __init__.py
, para dizer ao python que é um pacote do qual importar módulos. Nos dois casos, os módulos precisam de sua .py
extensão, mas a importação é feita sem (veja mais abaixo).
Por padrão, o Python procura seus módulos e pacotes no $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
De dentro de um arquivo python, você pode adicionar caminhos ocasionalmente ao caminho padrão, adicionando as seguintes linhas na seção principal do 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 desejar importar o arquivo module_1.py
, localizado nesse diretório, adicione-o à seção head do meu código:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
E eu posso simplesmente importar o arquivo module_1.py
:
import module_1
Quando crio um pacote e quero importar os módulos do pacote, preciso criar uma pasta $PYTHONPATH
contendo os módulos, acompanhada de um arquivo (pode estar vazio) chamado__init__.py
Por exemplo:
Para importar a partir de um pacote (pasta) chamada my_package
em /home/myname/pythonfiles
, adicione o /home/myname/pythonfiles
caminho para o seu $PYTHONPATH
, como no exemplo 1, e importar o módulo chamado module_2.py
(dentro da pasta do pacote) simplesmente com: `
from <packagename> import module_2
Adicionando diretórios $PYTHONPATH
permanentemente:
Adicione a seguinte linha ao seu ~/.profile
arquivo.
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 no pacote incluem seu próprio __init__.py
arquivo.
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 estiver no mesmo diretório que o script ou aplicativo, ele será adicionado automaticamente.
Exemplo:
Se eu tiver uma pasta contendo script.py
e module.py
, eu posso simplesmente importar o módulo:
import module
__init__.py
arquivo em sua pasta? é assim que o python cria pacotes e permite importar módulos desse pacote. guide.python-distribute.org/creation.html