Должен ли я добавить свой проект Python в каталог site-packages или добавить свой проект в PYTHONPATH?

У меня есть проект Python, который содержит три компонента: основные исполняемые сценарии, модули, на которые полагаются эти сценарии, и данные (базы данных sqlite3, плоские файлы и т. д.), которыми эти сценарии манипулируют. На верхнем уровне есть файл __init__.py, так что другие программы также могут заимствовать из модулей, если это необходимо.

Вопрос в том, является ли более «Pythonic» или «правильным» переместить мой проект в каталог пакетов сайта по умолчанию или изменить PYTHONPATH, чтобы включить один каталог над моим проектом (чтобы проект можно было импортировать из)? С одной стороны, то, что я описал, является не строго «пакетом», а «проектом» с данными, которые можно рассматривать как пакет. Поэтому я склоняюсь к модификации PYTHONPATH (в конце концов, PYTHONPATH должен существовать по какой-то причине, верно?)


person CptSupermrkt    schedule 13.05.2014    source источник
comment
PYTHONPATH, руки вниз.   -  person Padraic Cunningham    schedule 14.05.2014


Ответы (1)


Определенно не добавляйте свой проект в сайт-пакеты, это испортит вашу системную установку Python и сработает в тот момент, когда туда придет какое-то другое приложение или вам нужно будет что-то установить.

Наконец, есть два популярных варианта изолированной установки приложений Python.

Использование виртуальной среды

См. проект virtualenv. Это позволяет

  • создание новой изолирующей среды python - python для этой среды отличается от системной и имеет собственную настройку PYTHONPATH, что позволяет сохранить для нее все установленные пакеты закрытыми.
  • активация и деактивация данного virtualenv из командной строки для использования командной строки. После activate вы можете запустить pip install и т. д., и это повлияет только на данную установку virtualenv.
  • вызов любого скрипта Python путем запуска с помощью копии Python virtualenv — при этом будет использоваться соответствующий virtualenv (обратите внимание, что нет необходимости вызывать какой-либо activate)

используя zc.buildout

Этот пакет предоставляет команду buildout. При этом вы можете использовать специальный файл конфигурации, что позволяет создать локальную среду Python со всеми пакетами и скриптами.

Выводы

  • virtualenv кажется более популярным сегодня, и мне намного проще его изучать и использовать
  • zc.buildout также может работать на вас, но будьте готовы к тому, что вам потребуется немного больше времени для обучения
  • установка в системные каталоги Python всегда должна быть зарезервирована для очень особых случаев (pip, easy_install), лучше избегать этого.
  • установка в частные каталоги и манипулирование PYTHONPATH также является вариантом, но вы повторите, что virtualenv уже предоставляет
person Jan Vlcinsky    schedule 13.05.2014