Python:easy_install 过程中发生了什么?

4 投票
1 回答
1513 浏览
提问于 2025-04-16 22:12

我对egg文件和用easy_install安装它们有点困惑,希望你能帮我解答一下。(我听说大家推荐用pip,但我想在继续之前先搞明白这个。)

比如说,我从一个U盘上直接复制一个文件,比如django_guardian-1.0.2-py2.6.egg,然后放到~/bar/这个目录里,而这个目录是PYTHONPATH指向的地方。接着我尝试用import guardian来导入内容,结果却出现了导入错误(ImportError)。即使我把easy_install.pth文件也复制过去了,这个错误还是会出现。

import sys; sys.__plen = len(sys.path)
./django_guardian-1.0.2-py2.6.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)

但是,如果我用easy_install django-guardian来安装,就没有这个问题了。

我查看了easy_install把egg文件安装到的目录,里面只有.pth文件和.egg文件。我想知道easy_install还做了哪些其他的操作或添加了什么内容,导致我用第一种方法无法使用……

1 个回答

4

easy_install 使用 .pth 文件来把 .egg 文件添加到 sys.path 中。这个 sys.path 就是 Python 查找要导入的模块的地方列表。

.pth 文件是由 site 模块处理的,但只在四个预定义的目录中。这些目录是根据你的操作系统特定的,基于 sys.prefixsys.exec_prefix 的设置。在 Unix 系统中,最常见的目录通常是 /usr/lib/pythonXX/site-packages

因为你自定义的目录不在 site 处理的目录中,所以你的 .pth 文件不会被处理,Python 也不会去查看 .egg 文件。

想了解更多信息,可以查看 这个 site 模块的文档

撰写回答