2010-01-08 59 views
79

我对Python中的蛋文件有疑问。如何创建Python蛋文件

我有很多按程序包组织的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>那样拆包呢?
+0

我应该用什么来代替鸡蛋呢?这里是我关于鸡蛋的问题http://stackoverflow.com/questions/14902732/what-is-pastedeploy-and-do-i-need-to-learn-it-if-e-gs-in-python-are-considered-g – Green 2013-02-15 21:06:17

+0

@YauhenYakimovich:该链接现在是一个停放的垃圾邮件域。也许值得编辑使用https://packaging.python.org/en/latest/wheel_egg/? – 2015-09-16 18:51:07

+0

@ChrisAdams thnx – 2015-09-25 08:24:31

回答

69

您正在阅读错误的文档。你想这样的:http://peak.telecommunity.com/DevCenter/setuptools

  1. 创建setup.py覆盖Python的标准库文件here在Distutils的文档。主要区别(对于蟒蛇蛋)是import setupsetuptools,而不是distutils

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

  3. 我不这么认为。 pyc文件可以是版本和平台相关的。您可以打开鸡蛋(它们应该只是zip文件),并删除.py文件,并将文件保留为.pyc,但不推荐使用。

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

+49

+1:永远不要包含.pyc文件。他们完全混淆。我们意外地将windows.pyc文件复制到Linux机器上,并且发生了最令人困惑的错误追踪消息。因为原始Windows文件名所在的文件名。在生产服务器上看到这些Windows文件名是很可怕的。 – 2010-01-08 11:31:15

+0

只是使用pyinstaller – Nickpick 2017-02-08 12:24:44

27

对于#4,与启动java并为您的应用使用jar文件最接近的是Python 2.6,executable zip files and directories中的一项新功能。

python myapp.zip 

哪里myapp.zip是含有作为要执行的脚本文件时执行的文件__main__.py一个拉链。你的软件包的依赖关系,也可以包含在文件中:

__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__')。

蛋文件只是ZIP文件,所以你也许可以添加__main__.py到你的蛋用zip工具,并使其可执行在Python 2.6和像python myapp.egg,而不是在PYTHONPATH环境变量设置上述咒语运行它。

上的可执行zip文件包括如何让他们直接执行与shebang更多信息,请Michael Foord's blog post on the subject找到。

+0

或者可以使用虚拟环境http://guide.python-distribute.org/installation.html#upgrading – 2012-07-23 15:29:59

8

我想你应该使用python wheels来代替鸡蛋现在分配。

车轮是蟒蛇发行的新标准,并打算用 取代鸡蛋。支持在pip> = 1.4和setuptools> = 0.8中提供。

+0

据我所知,您无法导入滚轮。有时候我只是想将我的脚本和一个鸡蛋一起部署,使它更加便携。 – RPGillespie 2016-05-26 20:38:16