Compartilhando módulos utilitários entre projetos python
-
10-07-2019 - |
Pergunta
Qual seria a melhor estratégia estrutura de diretório para compartilhar utilitários módulo através de meus projetos Python? Como os módulos comuns seria atualizado com novas funções que eu não gostaria de colocá-los no python diretório de instalação.
project1/
project2/
sharedUtils/
De project1 eu não posso usar "importação .. \ sharedUtils", há alguma outra maneira? Eu preferiria não codificar o "sharedUtils" localização
Agradecemos antecipadamente
Solução
Faça um pacote autônomo separado? E colocá-lo no site-packages / do seu python instalar?
Há também é o meu favorito quando se trata de modo de desenvolvimento:. Uso de links simbólicos e / ou arquivos *.pth
Outras dicas
Suponha que você tenha sharedUtils/utils_foo
e sharedUtils/utils_bar
.
Você pode editar o seu PYTHONPATH para incluir sharedUtils
, em seguida, importá-los em project1
e project2
usando
import utils_foo
import utils_bar
etc.
No Linux, você poderia fazer isso estar editando ~ / .profile com algo parecido com isto:
PYTHONPATH=/path/to/sharedUtils:/other/paths
export PYTHONPATH
Usando a variável de ambiente PYTHONPATH afeta os diretórios que pesquisas python quando se olha para os módulos. Uma vez que cada usuário pode definir sua própria PYTHONPATH, esta solução é boa para projetos pessoais.
Se você quiser que todos os usuários na máquina para ser capaz de módulos de importação em sharedUtils
, em seguida,
você pode conseguir isso usando um arquivo .pth
. Exatamente onde você colocar o arquivo .pth
pode depender de sua distribuição python. Vejo
http: //bob.pythonmac. org / arquivos / 2005/02/06 / utilizando-PTH-arquivos-de-python-desenvolvimento /
Estrutura de diretórios:
project1/foo.py
sharedUtils/bar.py
Com os diretórios como você mostrou-lhes, a partir foo.py
dentro do diretório project1
você pode adicionar o caminho relativo para sharedUtils
da seguinte forma:
import sys
sys.path.append("../sharedUtils")
import bar
Isso evita codificar um caminho C:/../sharedUtils
, e vai trabalhar enquanto você não mudar a estrutura de diretórios.