Как создать файл яйца Python - PullRequest
       17

Как создать файл яйца Python

87 голосов
/ 08 января 2010

У меня есть вопросы по поводу яичных файлов в Python.

У меня много кода на Python, организованного по пакетам, и я пытаюсь создать файлы egg. Я следую инструкциям , но они очень распространены.

В соответствии с этим, мне кажется, мне нужен файл setup.py.

  1. Подскажите, пожалуйста, что мне нужно поместить в файл setup.py и где он должен находиться?
  2. Полагаю, достаточно создать setup.py и затем запустить «setup.py bdist_egg» для получения файла egg. Не могли бы вы подтвердить?
  3. Можно ли включать в файл egg только файлы .pyc?
  4. Имея файл .egg, как я могу просто запустить код с него, не распаковывая, как java -jar <jar file> делает?

Ответы [ 3 ]

72 голосов
/ 08 января 2010

Вы читаете не ту документацию. Вы хотите это: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. Создание setup.py описано в документации distutils в документации стандартной библиотеки Python здесь . Основное отличие (для яиц питона) это вы import setup от setuptools, а не distutils.

  2. Да. Это должно быть правильно.

  3. Я так не думаю. Файлы pyc могут зависеть от версии и платформы. Возможно, вы сможете открыть яйцо (это должны быть только zip-файлы) и удалить файлы .py, оставив файлы .pyc, но это не рекомендуется.

  4. Я не уверен. Это может быть «Режим разработки». Или вы ищете какой-нибудь режим «py2exe» или «py2app»?

30 голосов
/ 28 октября 2011

Для # 4 наиболее близким к запуску java с файлом jar для вашего приложения является новая функция в Python 2.6, исполняемые zip-файлы и каталоги .

python myapp.zip

Где myapp.zip - это zip-файл, содержащий файл __main__.py, который выполняется как файл сценария, который нужно выполнить. Ваши зависимости пакета также могут быть включены в файл:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

Вы также можете выполнить яйцо, но заклинание не так приятно:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

Это помещает myapp.egg в путь Python и использует аргумент -m для запуска модуля. Ваш myapp.egg, скорее всего, будет выглядеть примерно так:

myapp/__init__.py
myapp/somelibfile.py

И python будет работать __init__.py (вы должны проверить, что __file__=='__main__' в вашем приложении для использования в командной строке).

Яичные файлы - это просто zip-файлы, так что вы можете добавить __main__.py в ваше яйцо с помощью zip-инструмента и сделать его исполняемым на python 2.6 и запустить его как python myapp.egg вместо приведенного выше заклинания, где переменная среды PYTHONPATH установлен.

Дополнительную информацию об исполняемых zip-файлах, в том числе о том, как сделать их непосредственно исполняемыми с shebang , можно найти в блоге Майкла Фоорда на эту тему .

10 голосов
/ 05 февраля 2015

Я думаю, вы должны использовать колеса питона для распространения вместо яйца.

Колеса являются новым стандартом дистрибутива Python и предназначены для заменить яйца. Поддержка предлагается в pip> = 1.4 и setuptools> = 0.8.

...