如何创建Python egg文件
我有关于Python中egg文件的问题。
我有很多Python代码,都是按包组织的,现在我想创建egg文件。 我在按照这个说明来做,但内容比较笼统。
根据这些说明,我好像需要一个setup.py文件。
- 你能告诉我setup.py文件里需要写什么,以及它应该放在哪里吗?
- 我想应该只需要创建setup.py文件,然后运行“setup.py bdist_egg”就能得到egg文件。你能确认一下吗?
- 能不能只把.pyc文件放进egg文件里?
- 有了.egg文件,我怎么能直接运行里面的代码,而不需要像
java -jar <jar file>
那样解压?
3 个回答
我觉得你现在应该使用python wheels来分发程序,而不是用egg。
wheels是Python分发的新标准,目的是取代egg。pip版本大于等于1.4和setuptools版本大于等于0.8都支持这个格式。
对于第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的博客文章中找到。
你看错文档了。你应该查看这个:https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode
关于创建setup.py的内容,可以在Python标准库的distutils文档中找到,具体可以查看这里。主要的区别是(针对python eggs),你需要从
setuptools
中import setup
,而不是从distutils
。没错,这应该是对的。
我觉得不是。
pyc
文件可能会跟版本和平台有关。你可以尝试打开egg文件(它们其实就是zip文件),然后删除.py
文件,只留下.pyc
文件,但这样做不太推荐。我不太确定。那可能是“开发模式”。或者你是在找“py2exe”或“py2app”模式?