Python:easy_install 过程中发生了什么?
我对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.prefix
和 sys.exec_prefix
的设置。在 Unix 系统中,最常见的目录通常是 /usr/lib/pythonXX/site-packages
。
因为你自定义的目录不在 site
处理的目录中,所以你的 .pth
文件不会被处理,Python 也不会去查看 .egg
文件。
想了解更多信息,可以查看 这个 site
模块的文档。