2015-06-05 2 views
3

Скажем, у меня есть приложение Python, которое будет использоваться в качестве инструмента командной строки. Это приложение имеет некоторые внешние зависимости. Как я буду распространять это?Распространять приложения Python «с» venv

Я знаю, что это обычная установка вещей Python в виртуальной среде (virtualenv или pyvenv), но если приложение должно использоваться из командной строки, я не хочу, чтобы я или мои пользователи активировали правильный виртуальный окружающей среды каждый раз, когда они хотят использовать мое приложение.

Есть ли решение для этого? Или я должен просто поместить все зависимости в setup.py и оставить для пользователя независимо от того, создают ли они виртуальную среду или нет?

+5

* «Или я должен просто поставить все зависимости в setup.py и оставить его пользователю создавать ли они в виртуальной среде или нет?» * - да, это. – jonrsharpe

+0

, если вы устанавливаете приложение (пакет) во всем мире, его зависимости также будут установлены глобально .... вы, вероятно, должны прочитать [this] (http://www.pythoncentral.io/package-python-django-application-reusable-component /) – yamm

ответ

2

Используйте setup.py и перечислите зависимости в install_requires.

Сейчас на странице "Как распределить это?"

В нашей компании мы запускаем собственный сервер pypi. Каждый пакет, который устанавливается на наших серверах, должен быть на нашем pypi-сервере. Программное обеспечение не загружается напрямую из Интернета на сервер.

Если вы хотите создать инструмент с открытым исходным кодом, вы должны загрузить его на официальный pypi-сервер.

Инструмент не должен заботиться об окружающей среде. Он должен работать в virtualenv и снаружи.

Может sampleproject поможет вам: https://github.com/pypa/sampleproject

+0

Спасибо, изменил ваш ответ на принятый, потому что 'setup_requires' действительно лучший вариант для инструмента командной строки :) – lunanoko

+0

Вы можете оставить комментарий, если у вас есть вопросы относительно моего ответа :-) – guettli

1

Я упоминаю альтернативное решение с файлом requirements.txt для pip. Обратитесь к документации:

https://pip.pypa.io/en/latest/user_guide.html#requirements-files

Затем пользователь знает, что зависимости приложения имеет и может легко установить их в его/ее виртуальную среду с pip install -r requirements.txt.

Файл может быть легко создан с помощью pip freeze > requirements.txt.

+1

Хорошо, спасибо. Я знаю, как распределить подобное, но я думал, что есть способ, чтобы setuptools создавали вид venv, без конечного пользователя, который должен был это осознать. Полагаю, я помнил неправильно;) Спасибо за ваш совет! – lunanoko

+0

Нет, это не требование. Txt. Инструмент командной строки похож на библиотеку. Используйте 'install_requires' в' setup.py'. Используйте свою любимую поисковую систему, если вы не уверены. – guettli

0

Этот вид зависит от того, кто, по вашему мнению, будет использовать ваше приложение. Если вы распространяете его через pip, ваш пользователь должен иметь возможность решить, использовать ли виртуальный или нет. Если вы хотите, чтобы ваши пользователи просто загружали ваш скрипт с веб-сайта (возможно, даже для окон), и он «просто работает», вы можете связать свои зависимости (и, возможно, даже интерпретатор python), а затем изменить PYTHONPATH соответственно. Конечно, вы также можете использовать разные способы распространения, например. a docker image.