如何创建Python egg文件

yar*_*art 88 python packaging egg

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

我有很多由代码组织的Python代码,我正在尝试创建egg文件.我正在遵循指示,但它们很常见.

根据它,似乎我需要一个setup.py文件.

  1. 你能告诉我我需要在setup.py文件中放入什么以及它应该驻留在哪里吗?
  2. 我想这足以创建setup.py,然后启动"setup.py bdist_egg"来获取egg文件.能否请你确认?
  3. 是否可以仅将.pyc文件包含在egg文件中?
  4. 有.egg文件我怎么能从它启动代码而不解压缩java -jar <jar file>呢?

wis*_*sty 72

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

  1. 创建setup.py覆盖Python的标准库文档中的distutils文档中的位置.主要的区别(对于蟒蛇蛋)是你import setupsetuptools,不是distutils.

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

  3. 我不这么认为.pyc文件可以依赖于版本和平台.您也许能够打开鸡蛋(他们应该被zip文件),并删除.py的文件留下.pyc的文件,但它不会被推荐.

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

  • +1:永远不要包含.pyc文件.他们完全令人困惑.我们不小心将windows .pyc文件复制到了一个linux盒子上,并且遇到了最令人困惑的错误回溯消息.因为文件名所在的原始Windows文件名.在生产服务器上看到那些Windows文件名是很可怕的. (50认同)

lam*_*cck 30

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

python myapp.zip
Run Code Online (Sandbox Code Playgroud)

其中myapp.zip是包含__main__.py文件的zip,该文件作为要执行的脚本文件执行.您的包依赖项也可以包含在文件中:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py
Run Code Online (Sandbox Code Playgroud)

你也可以执行一个鸡蛋,但咒语不是很好:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
Run Code Online (Sandbox Code Playgroud)
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp
Run Code Online (Sandbox Code Playgroud)

这将myapp.egg放在Python路径上并使用-m参数来运行模块.你的myapp.egg可能看起来像:

myapp/__init__.py
myapp/somelibfile.py
Run Code Online (Sandbox Code Playgroud)

并且python将运行__init__.py(您应该__file__=='__main__'在应用程序中检查命令行使用).

egg文件只是zip文件,因此您可以__main__.py使用zip工具添加到egg中,并使其在python 2.6中可执行并运行它,python myapp.egg而不是设置PYTHONPATH环境变量的上述咒语.

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


Han*_*Sun 10

我认为你现在应该使用python轮子而不是鸡蛋.

轮子是python分布的新标准,旨在取代鸡蛋.支持以pip> = 1.4和setuptools> = 0.8提供.

  • 据我所知,你不能导入一个轮子.有时我只想将我的脚本与一个鸡蛋一起部署,以使其更具可移植性. (2认同)