Як створити файл яйця 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.