Я могу сделать яйцо python с помощью setuptools: python setup.py bdist_egg
. Теоретически я должен сделать это для каждого установленного пакета с файлом setup.py
. Можно ли инкапсулировать всю виртуальную среду python virtualenv
в яйцо питона?Могу ли я сделать virtualenv в яйце
ответ
Вы не должны делать это по нескольким причинам
Даже если вы могли бы управлять, чтобы сделать это, он не будет работать, как и следовало ожидать. Если у пользователя уже установлен один из пакетов внутри вашего яйца, они будут сталкиваться, потому что яйца python не добавляют дополнительных пространств имен.
Кроме того, яйца-питоны наход тс на своем пути. Если вы хотите создать двоичный дистрибутив, вы должны использовать новый python wheels
.
Если у вас есть проект с зависимостями, просто объявите эти зависимости в своем setup.py
, и pip обработает их установку. Если у вас есть некоторые зависимости, которые не существуют в PyPi, или вам нужна очень конкретная версия пакета, просто включите эти пакеты в качестве подпакета в своем пакете.
/my_package
__init__.py
/libs
__init__.py
/non_pypi_package
/legacy_package
И тогда в вашем коде, вместо того, чтобы импортировать их как
import non_pypy_package
вы бы использовать
from my_package.libs import non_pypi_package
Как я использую яйца Я могу сохранить скомпилированный пакет C/Fortran, который является зависимостью пакета python. Есть ли способ, которым я все еще могу это сделать? – kilojoules
Вы можете сделать это, используя параметр ['package_data'] (https://docs.python.org/2/distutils/setupscript.html#installing-package-data) функции' setup'. Если вы предоставите более подробную информацию о том, как структурирован ваш проект, я могу добавить точные команды для их включения. –
Я не уверен, как я могу использовать package_data в том, как вы описываете. Этот предыдущий ответ был не столь обнадеживающим: http://stackoverflow.com/a/14159430/3474956. Не похоже, что существует какой-либо современный эквивалент яйцам питона. – kilojoules
Что такое файловая структура макет вашего проекта? –