Как создать файл яйца 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/…
Green

@YauhenYakimovich: эта ссылка теперь является припаркованным спам-доменом. Может быть, стоит отредактировать, чтобы использовать package.python.org/en/latest/wheel_egg ?
Крис Адамс,

Ответы:


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. Они совершенно сбивают с толку. Мы случайно скопировали файлы Windows .pyc в 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-файлах, в том числе о том, как сделать их непосредственно исполняемыми с помощью shebang, можно найти в сообщении блога Майкла Фурда по этому вопросу .


В качестве альтернативы можно использовать виртуальную среду guide.python-distribute.org/installation.html#upgrading
Евгений Якимович

10

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

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


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