如何创建 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:带有一个文件源文件的 python 鸡蛋的简单示例?