96

我对 Python 中的 egg 文件有疑问。

我有很多按包组织的 Python 代码,我正在尝试创建 egg 文件。我正在按照说明进行操作,但它们很常见。

据此,看来我需要一个 setup.py 文件。

  1. 你能告诉我我需要在 setup.py 文件中添加什么以及它应该放在哪里吗?
  2. 我想创建 setup.py 然后启动“setup.py bdist_egg”来获取鸡蛋文件就足够了。能否请你确认?
  3. 是否可以仅将 .pyc 文件包含到 egg 文件中?
  4. 拥有 .egg 文件后,我如何才能从其中启动代码而无需像java -jar <jar file>那样解包?
4

3 回答 3

77

您正在阅读错误的文档。你想要这个:https ://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. 创建 setup.py 包含在 Python 标准库文档的 distutils 文档。主要区别(对于 python 鸡蛋)是你import setup来自setuptools,而不是distutils.

  2. 是的。那应该是对的。

  3. 我不这么认为。pyc文件可以是版本和平台相关的。您也许可以打开 egg(它们应该只是 zip 文件)并删除.py留下.pyc文件的文件,但不建议这样做。

  4. 我不知道。那可能是“开发模式”。或者您正在寻找一些“py2exe”或“py2app”模式?

于 2010-01-08T10:54:42.167 回答
30

对于 #4,最接近使用应用程序的 jar 文件启动 java 的方法是 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__'在你的应用程序中检查它以供命令行使用)。

Egg 文件只是 zip 文件,因此您可以__main__.py使用 zip 工具将其添加到您的 egg 并使其在 python 2.6 中可执行并像python myapp.egg上面设置 PYTHONPATH 环境变量的咒语一样运行它。

有关可执行 zip 文件的更多信息,包括如何使用shebang使它们直接可执行,可以在Michael Foord 的有关该主题的博客文章中找到。

于 2011-10-28T14:55:58.233 回答
11

我认为您现在应该使用python 轮子而不是 egg 进行分发。

Wheels 是 python 分发的新标准,旨在取代鸡蛋。在 pip >= 1.4 和 setuptools >= 0.8 中提供支持。

于 2015-02-05T05:49:17.423 回答