Як створити файл яйця Python


91

У мене є запитання щодо файлів яєць у Python.

У мене багато коду Python, організованого за пакетом, і я намагаюся створити файли яєць. Я дотримуюсь інструкцій , але вони дуже поширені.

Відповідно до цього, здається, мені потрібно мати файл setup.py.

  1. Скажіть, будь ласка, що мені потрібно вставити у файл setup.py і де він повинен знаходитись?
  2. Я вважаю, що досить створити setup.py, а потім запустити "setup.py bdist_egg" для отримання файлу яйця. Не могли б ви підтвердити?
  3. Чи можна до файлу яйця включити лише файли .pyc?
  4. Маючи файл .egg, як я можу просто запустити з нього код, не розпаковуючи, як java -jar <jar file>це робить?

Що тоді я повинен використовувати замість яєць? Ось моє запитання щодо яєць stackoverflow.com/questions/14902732/…
Зелений

@YauhenYakimovich: це посилання тепер припаркований домен спаму. Можливо, варто редагувати, щоб використовувати упаковку.python.org/ en/latest/ wheel_egg ?
Chris Adams

Відповіді:


74

Ви читаєте неправильну документацію. Ви хочете це: 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”?


51
+1: Ніколи не включайте файли .pyc. Вони абсолютно заплутані. Ми випадково скопіювали файли .pyc Windows у вікно Linux і отримали найбільш заплутані повідомлення про відстеження помилок. Оскільки імена файлів містять оригінальні імена файлів Windows. Страшно було бачити ці імена файлів Windows на виробничому сервері.
S.Lott

просто використовуйте pyinstaller
Nickpick

30

Для №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-файли, зокрема про те, як зробити їх безпосередньо виконуваними за допомогою шебанга, можна знайти в публікації блогу Майкла Фоорда на цю тему .


В якості альтернативи можна використовувати віртуальне середовище guide.python-distribute.org/installation.html#upgrading
Явген Якимович

10

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

Колеса - це новий стандарт розподілу пітонів і призначений замінити яйця. Підтримка пропонується в pip> = 1.4 та setuptools> = 0.8.


2
Ви не можете імпортувати колесо, наскільки я можу судити. Іноді я просто хочу розгорнути свій сценарій разом з яйцем, щоб зробити його більш портативним.
Гіллеспі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.