2016-09-07 5 views
1

Я работаю над проектом python, который содержит несколько подпрограмм, которые я использую повторно. Вместо того, чтобы переписывать код все время, я просто хочу обновить свой пакет и импортировать его; однако он нигде не близок и постоянно меняется. Я размещаю пакет на репо, чтобы коллеги на разных машинах (UNIX + Windows) могли вытащить его в свои локальные репозитории и использовать его.Разница между добавлением пути к PYTHONPATH и установкой собственного модуля

Похоже, у меня есть два варианта: либо я могу поддерживать установку пакета после каждого изменения, либо просто добавить каталог папки на путь моей системы. Если я изменю пакет, нужно ли его переустановить? I'm using this blog post as inspiration, но автор там не подчеркивает проблему постоянно меняющейся структуры пакета, поэтому я не уверен, как с этим бороться.

Также, если я хотел разделить проект на несколько файлов и расслоить его как пакет, на каком уровне в структуре каталогов должен находиться PTYHONPATH? В основной каталог проекта или каталог .sample /?

README.rst 
LICENSE 
setup.py 
requirements.txt 
sample/__init__.py 
sample/core.py 
sample/helpers.py 
docs/conf.py 
docs/index.rst 
tests/test_basic.py 
tests/test_advanced.py 

В этом примере, я хочу, чтобы иметь возможность просто импортировать сам пакет и вызвать модули в нем, как это:

import sample 

arg = sample.helper.foo() 
out = sample.core.bar(arg) 

return out 

где ядро ​​содержит функцию с именем Foo

ответ

0

PYTHONPATH это правильный способ сделать это, но в моем (личном) мнении это более полезно, если у вас есть совершенно другое место, где вы сохраняете переменные python. Например /opt/pythonpkgs или около того.

Для проектов, где я хочу, чтобы это установить, а также я должен продолжать развиваться, я использую develop вместо install в setup.py:

При установке пакета, не делают:

python setup.py install 

Скорее, сделайте следующее:

python setup.py develop 

что это делает, что он создает synlink/ярлык (я считаю, что это называется egglink в Python) в питона л ibs (где пакеты установлены), чтобы указать на каталог вашего модуля. Следовательно, поскольку это ярлык/symlink/egglink, когда вы когда-либо изменяете файл python, он сразу же отразит следующий раз, когда вы импортируете этот файл.

Примечание: Используя это, если вы удалите хранилище/каталог, который запустил эту команду, пакет перестанет существовать (как его только ярлык)

Эквивалент в pip является -e (для редактирования) :

pip install -e . 

Вместо:

pip install . 
+0

в вашем примере,/Opt/pythonpkgs находится на PYTHONPATH, и каждый пакет в своем собственном каталоге. Должен ли каталог pythonpkgs содержать файл __init__.py? Нужен ли каждый пакет в этом каталоге? – cbcoutinho

+0

'/ opt/pythonpkgs/__ init __. Py' не требуется. '/ opt/pythonpkgs/my_first_pkg/__ init __. py' должен существовать. – AbdealiJK

 Смежные вопросы

  • Нет связанных вопросов^_^