Eu tenho uma estrutura de arquivo como esta:
Folder
Common
foo1.py
TestFolder
foo2.py
Eu quero importar em foo2.py
e foo1.py
. Eu tentei, mas não funciona no Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
**Como a pitão encontra os seus módulos***
Estritamente tomado, um módulo é um único arquivo python, enquanto um package é uma pasta contendo arquivos python, acompanhado por um arquivo (pode estar vazio) chamado __init__.py
, para dizer python que é 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, 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...
De dentro de um arquivo python, você pode adicionar caminho(s) ocasionalmente ao caminho padrão, adicionando as seguintes linhas na seção do cabeçalho 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 eu quero importar o arquivo module_1.py
, localizado nesse diretório, eu adiciono isso à seção principal do meu código:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
E eu posso simplesmente importar o arquivo module_1.py
por:
import module_1
Quando eu crio um package e quero importar módulo(s) do pacote, preciso criar uma pasta em $PYTHONPATH
, contendo os módulos, acompanhada por um arquivo (pode estar vazio) chamado __init__.py
.
Por exemplo:
Para importar de um pacote (pasta) chamado my_package' em
/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 para $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 "chain" 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 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 a aplicação***
Não há necessidade de inserir o caminho para um módulo quando ele está no mesmo diretório que o script ou aplicativo, ele é automaticamente adicionado.
Exemplo:
Se eu tiver uma pasta, contendo script.py
e module.py
, eu posso simplesmente importar o módulo por:
import module
NB: Esta resposta está desactualizada para a última versão do python 3, mas está aqui para a versão anterior. Para mais informações leia os comentários e https://www.python.org/dev/peps/pep-0420/
Essencialmente todas as pastas com código python que você quer adicionar ao syspath precisam de um arquivo {\i1}init{\i}.python. Estes ficheiros de py podem estar vazios.