PYTHONPATH被忽略

12 投票
7 回答
25468 浏览
提问于 2025-04-15 12:17

环境:debian 4.0

Python 2.4

我的“项目”安装在:

/usr/lib/python2.4/site-packages/project。

但我想使用我正在开发的版本,而不是安装的那个,安装的版本在:

/home/me/dev/project/src

所以我做了以下操作:

export PYTHONPATH=/home/me/dev/project/src

ipython

import foo # 这个在 src 目录下

foo.__file__

*/usr/lib/python2.4/site-packages/project/foo.py*

而不是:

/home/me/dev/project/src/project/foo.py

这是为什么呢?我尝试检查路径(在上面做了导出之后),我看到的是:

import sys,os

sys.path

['', '/usr/bin', '/usr/lib/python2.4/site-packages', '/home/me/dev/project/src', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/PIL', '/var/lib/python-support/python2.4', '/usr/lib/python2.4/site-packages/IPython/Extensions', '/home/me/.ipython']

os.environ['PYTHONPATH']

/home/me/dev/project/src

7 个回答

4

我觉得你无法控制PYTHONPATH被插入到实际路径列表中的位置。不过,这并不是修改路径的唯一方法——你可以在尝试导入项目之前,自己更新sys.path。

补充:在你的具体情况下,你可以通过以下方式修改路径:

import sys
sys.path.insert(2, '/home/me/dev/project/src')
5

我找到了问题所在(之前有人提醒我去看 Python的sys.path是从哪里初始化的?,我没注意到)。

看起来,easy_install会创建一个名为 /usr/lib/python2.4/site-packages/easy-install.pth 的文件,然后这个文件会被site.py加载。这样一来,site-packages的路径就会在PYTHONPATH之前被插入到sys路径中。这可真不太好。

6

根据Python的文档,这是预期的行为https://docs.python.org/2.4/lib/module-sys.html

注意,脚本所在的目录会被放在因为PYTHONPATH而插入的条目之前

在Python 2.6中,这个情况就不一样了:http://docs.python.org/tutorial/modules.html#the-module-search-path

撰写回答