如何创建 Python 鸡蛋文件

Posted

技术标签:

【中文标题】如何创建 Python 鸡蛋文件【英文标题】:How to create Python egg file 【发布时间】:2011-01-02 20:10:22 【问题描述】:

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

我有很多按包组织的 Python 代码,我正在尝试创建 egg 文件。 我关注instructions,但它们很常见。

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

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

【问题讨论】:

那我应该用什么代替鸡蛋呢?这是我关于鸡蛋的问题***.com/questions/14902732/… @YauhenYakimovich:该链接现在是一个停放的垃圾邮件域。也许值得编辑使用packaging.python.org/en/latest/wheel_egg? 【参考方案1】:

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

    在 Python 标准库文档 here 的 distutils 文档中介绍了创建 setup.py。主要区别(对于python鸡蛋)是import setup来自setuptools,而不是distutils

    是的。应该没错。

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

    我不确定。那可能是“开发模式”。还是您在寻找一些“py2exe”或“py2app”模式?

【讨论】:

+1:永远不要包含 .pyc 文件。他们完全令人困惑。我们不小心将 windows .pyc 文件复制到了一个 linux 机器上,并且得到了有史以来最令人困惑的错误回溯消息。因为原始 Windows 文件名所在的文件名。在生产服务器上看到那些 windows 文件名真是太可怕了。 只使用pyinstaller【参考方案2】:

对于#4,最接近使用应用程序的 jar 文件启动 java 的方法是 Python 2.6 中的一个新功能,executable zip files and directories。

python myapp.zip

其中 myapp.zip 是一个包含 __main__.py 文件的 zip,该文件作为要执行的脚本文件执行。您的包依赖项也可以包含在文件中:

__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 文件,因此您可以使用 zip 工具将 __main__.py 添加到您的 egg 并使其在 python 2.6 中可执行并像 python myapp.egg 一样运行它,而不是上面的 PYTHONPATH 环境变量的咒语设置好了。

有关可执行 zip 文件的更多信息,包括如何使用 shebang 使它们直接可执行,请访问 Michael Foord's blog post on the subject。

【讨论】:

也可以使用虚拟环境guide.python-distribute.org/installation.html#upgrading【参考方案3】:

我认为你现在应该使用python wheels 来分发而不是鸡蛋。

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

【讨论】:

据我所知,您无法导入***。有时我只想将我的脚本与一个 egg 一起部署以使其更便携。

以上是关于如何创建 Python 鸡蛋文件的主要内容,如果未能解决你的问题,请参考以下文章

在 python 轮中仅包含 *.pyc 文件

从文件而不是鸡蛋运行 Python 包

python:带有一个文件源文件的 python 鸡蛋的简单示例?

如何停用鸡蛋?

Python:为啥有些包作为鸡蛋安装,有些作为“鸡蛋文件夹”安装?

谁在OS中安排调度程序 - 这不是一个鸡蛋和鸡蛋的场景吗?