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

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

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

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

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

【问题讨论】:

标签: python packaging egg


【解决方案1】:

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

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

  2. 是的。应该没错。

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

  4. 我不确定。那可能是“开发模式”。还是您在寻找一些“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

【讨论】:

【解决方案3】:

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

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

【讨论】:

  • 据我所知,您无法导入轮子。有时我只想将我的脚本与一个 egg 一起部署以使其更便携。
猜你喜欢
  • 2011-01-02
  • 2014-09-22
  • 2017-03-08
  • 1970-01-01
  • 2011-02-27
  • 2016-03-03
  • 2017-06-25
  • 2011-02-13
  • 2019-02-21
相关资源
最近更新 更多