Eu tenho uma pasta para meu código de cliente, uma pasta para meu código de servidor e uma pasta para o código que é compartilhado entre eles
Proj/
Client/
Client.py
Server/
Server.py
Common/
__init__.py
Common.py
Como importo Common.py de Server.py e Client.py?
python
python-3.x
import
shared-libraries
relative-path
Desenhou
fonte
fonte
Respostas:
EDITAR novembro de 2014 (3 anos depois):
Python 2.6 e 3.x oferece suporte a importações relativas adequadas, onde você pode evitar fazer qualquer coisa hackeada. Com este método, você sabe que está obtendo uma importação relativa em vez de uma importação absoluta . O '..' significa ir para o diretório acima de mim:
Como uma advertência, isso só funcionará se você executar seu python como um módulo, de fora do pacote. Por exemplo:
Maneira hacky original
Você pode adicionar Common / ao seu sys.path (a lista de caminhos que o Python procura para importar coisas):
os.path.dirname(__file__)
apenas fornece o diretório em que seu arquivo Python atual está, e então navegamos para 'Comum /' o diretório e importamos 'Comum' o módulo.fonte
from ...myfile
vai para../../myfile
Engraçado, o mesmo problema que acabei de conhecer, e eu consigo este trabalho da seguinte maneira:
combinando com o comando linux
ln
, podemos tornar as coisas muito mais simples:E, agora, se você deseja importar
some_stuff
do arquivo:Proj/Common/Common.py
para o seu arquivoProj/Client/Client.py
:, assim:E, o mesmo se aplica a
Proj/Server
, Também funciona para osetup.py
processo, uma mesma questão discutida aqui , espero que ajude!fonte
Não faça importação relativa.
Do PEP8 :
Coloque todo o seu código em um super pacote (ou seja, "myapp") e use subpacotes para cliente, servidor e código comum.
Atualização: " Python 2.6 e 3.x suporta importações relativas adequadas (...) ". Veja as respostas de Dave para mais detalhes.
fonte
if __name__ == "__main__":
linha ' '. Ou seja, você deseja poder usá-los como scripts independentes. Como fazer isso corretamente? Acho que é um caso de uso perfeitamente comum que deve ser suportado. Por que isso está desanimado?Fazer uma importação relativa é absolutamente OK! Aqui está o que o meu pequeno faz:
fonte
__file__
para obter a relação adequada do arquivo atualO método de importação padrão já é "relativo", a partir do PYTHONPATH. O PYTHONPATH é por padrão, para algumas bibliotecas do sistema junto com a pasta do arquivo de origem original. Se você executar com -m para executar um módulo, o diretório atual será adicionado ao PYTHONPATH. Portanto, se o ponto de entrada do seu programa estiver dentro do Proj, use
import Common.Common
deve funcionar dentro de Server.py e Client.py.Não faça uma importação relativa. Não funcionará como você deseja.
fonte