Python egg与常规包有什么不同?

1 投票
4 回答
1180 浏览
提问于 2025-04-16 06:01

看起来,只要把一个包的路径加到你的PYTHONPATH里,就能访问它的所有模块和函数,这和安装一个egg包差不多。那它们之间的区别只是egg是压缩成zip格式的吗?

4 个回答

1

是的,当你引用zip格式的egg文件时,它们会被即时解压,这样会比你安装后使用要慢一些。

4

Python Eggs 是一个用来分发软件包的系统,它的功能远不止简单地复制文件和修改 $PYTHONPATH

编辑:这里的 远不止 指的是,比如说 运行时依赖关系的解决插件支持。更多信息可以查看 http://en.wikipedia.org/wiki/EasyInstall

1

当然可以,不过还有一些细节需要了解。你可以看看这个链接:http://www.ibm.com/developerworks/library/l-cppeak3.html,去找“关于 eggs 的一切”这一部分。

从上面的网站复制过来:

不过,修改 PYTHONPATH(或者在脚本或 Python 交互式环境中修改 sys.path)这种做法有点脆弱。处理 eggs 的发现,最好是通过一些新的魔法 .pth 文件来完成。在 site-packages/ 目录下或者 PYTHONPATH 中找到的任何 .pth 文件,都会被解析以进行额外的导入,这个过程和检查那些可能包含包的目录的方式非常相似。如果你使用 setuptools 来管理包,那么在安装、升级或删除包时,会修改一个叫做 easy-install.pth 的文件。不过,你可以随意命名你的 .pth 文件,只要它们有 .pth 的扩展名就行。例如,这是我的 easy-install.pth:

列表 11. .pth 文件作为 egg 位置的配置

% cat /sw/lib/python2.4/site-packages/easy-install.pth
import sys; sys.__plen = len(sys.path)
setuptools-0.6b1-py2.4.egg
SQLObject-0.7.0-py2.4.egg
FormEncode-0.5.1-py2.4.egg
Gnosis_Utils-1.2.1-py2.4.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:];
  p=getattr(sys,'__egginsert',0); sys.path[p:p]=new;
  sys.__egginsert = p+len(new)

这个格式有点特别:它几乎是一个 Python 脚本,但又不完全是。简单来说,你可以在里面添加更多的 eggs;更好的是,当 easy_install 运行时,它会为你自动处理这些。你也可以在 site-packages/ 下创建任意数量的其他 .pth 文件,每个文件可以简单列出要提供的 eggs。

撰写回答