如何创建Python Egg文件


91

我对Python中的鸡蛋文件有疑问。

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

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

  1. 您能告诉我我需要在setup.py文件中放入什么以及它应该放在哪里吗?
  2. 我想足以创建setup.py,然后启动“ setup.py bdist_egg”来获取egg文件。能否请你确认?
  3. 是否可以在鸡蛋文件中仅包含.pyc文件?
  4. 有了.egg文件,我怎么能从中启动代码而又不像打开包装一样java -jar <jar file>

那我应该用什么代替鸡蛋呢?下面是我对鸡蛋的问题stackoverflow.com/questions/14902732/...
格林

@YauhenYakimovich:该链接现在是垃圾邮件域名。也许值得编辑以使用Packaging.python.org/en/latest/wheel_egg
克里斯·亚当斯

Answers:


74

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

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

  2. 是的 那应该是对的。

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

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


51
+1:切勿包含.pyc文件。他们完全感到困惑。我们不小心将Windows .pyc文件复制到了Linux机器上,并且收到了有史以来最令人困惑的错误回溯消息。因为文件名位于原始Windows文件名中。在生产服务器上看到这些Windows文件名真是太恐怖了。
S.Lott 2010年

只需使用pyinstaller
Nickpick

30

对于#4,最接近使用应用程序的jar文件启动Java的是Python 2.6中的一项新功能,即可执行zip文件和目录

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文件,因此您可以__main__.py使用zip工具将其添加到您的鸡蛋中,并使其在python 2.6中可执行,然后像python myapp.egg设置PYTHONPATH环境变量的上述方法一样运行它。

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



10

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

轮子是python分发的新标准,旨在替换鸡蛋。pip> = 1.4和setuptools> = 0.8中提供了支持。


2
据我所知,您无法导入轮子。有时我只想将我的脚本与一个鸡蛋一起部署,以使其更易于移植。
Gillespie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.