如何创建Python egg文件

99 投票
3 回答
141293 浏览
提问于 2025-04-15 17:47

我有关于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>那样解压?

3 个回答

13

我觉得你现在应该使用python wheels来分发程序,而不是用egg。

wheels是Python分发的新标准,目的是取代egg。pip版本大于等于1.4和setuptools版本大于等于0.8都支持这个格式。

30

对于第4点,最接近用jar文件启动Java应用的功能是在Python 2.6中新增的一个特性,叫做可执行的zip文件和目录

python myapp.zip

这里的myapp.zip是一个压缩包,里面包含一个__main__.py文件,这个文件会被当作要执行的脚本。你的应用所依赖的其他包也可以放在这个文件里:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

你也可以执行一个egg文件,不过这样做的方式就没那么简单了:

# 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添加到你的egg文件中,这样在Python 2.6中就可以直接执行它,运行方式是python myapp.egg,而不需要像上面那样设置PYTHONPATH环境变量。

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

79

你看错文档了。你应该查看这个:https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. 关于创建setup.py的内容,可以在Python标准库的distutils文档中找到,具体可以查看这里。主要的区别是(针对python eggs),你需要从setuptoolsimport setup,而不是从distutils

  2. 没错,这应该是对的。

  3. 我觉得不是。pyc文件可能会跟版本和平台有关。你可以尝试打开egg文件(它们其实就是zip文件),然后删除.py文件,只留下.pyc文件,但这样做不太推荐。

  4. 我不太确定。那可能是“开发模式”。或者你是在找“py2exe”或“py2app”模式?

撰写回答