如何创建Python egg文件

时间:2010-01-08 08:46:51

标签: python packaging egg

我对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>那样解压缩呢?

3 个答案:

答案 0 :(得分:72)

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

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

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

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

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

答案 1 :(得分:30)

对于#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添加到鸡蛋中,并使其在python 2.6中可执行,并像python myapp.egg一样运行,而不是上面的咒语设置了PYTHONPATH环境变量。

有关可执行zip文件的更多信息,包括如何使用shebang直接执行这些文件,可以在Michael Foord's blog post on the subject找到。

答案 2 :(得分:10)

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

  

车轮是python发行的新标准,旨在实现   替换鸡蛋。支持以pip&gt; = 1.4和setuptools&gt; = 0.8提供。