11

环境:debian 4.0

蟒蛇2.4

我的“项目”安装在:

/usr/lib/python2.4/site-packages/项目。

但我想使用我的工作副本而不是位于以下位置的已安装副本:

/home/me/dev/project/src

所以我要做的是:

导出 PYTHONPATH=/home/me/dev/project/src

蟒蛇

import foo # 在 src 中

foo.__file__

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

代替 :

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

怎么来的?我尝试检查路径(已经完成了上面的导出),我看到的是:

导入系统,操作系统

系统路径

['', '/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

4

7 回答 7

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

于 2009-06-16T15:06:09.503 回答
5

我发现了问题(当有人向我指出Python 的 sys.path 从哪里初始化时,我很早就错过了? )。

似乎easy_install创建了一个pth文件/usr/lib/python2.4/site-packages/easy-install.pth,然后由site.py加载。这会将站点包路径插入到 PYTHONPATH 之前的 sys 路径中。不太好。

于 2009-06-16T16:31:17.047 回答
4

我不相信您可以控制 PYTHONPATH 插入实际路径列表的位置。但这不是修改路径的唯一方法 - 您可以在尝试导入项目之前自己更新 sys.path。

编辑:在您的特定情况下,您可以修改路径

import sys
sys.path.insert(2, '/home/me/dev/project/src')
于 2009-06-16T14:58:43.417 回答
1

我在“/home/me/dev/project/src”之前的路径中看到“/usr/lib/python2.4/site-packages”,这有关系吗?当你切换两者时会发生什么?

从文档:

如果未设置 PYTHONPATH,或者在此处找不到文件,则搜索将在依赖于安装的默认路径中继续

所以也许你没有像你想象的那样在你的 PYTHONPATH 上找到你的工作副本?

于 2009-06-16T14:53:05.410 回答
1

不是直接回答您的问题,但您也可以使用virtualenv来创建开发环境。然后,在该 virtualenv 中,您可以将您的产品/home/me/dev/project/src作为开发包安装:“ python setup.py develop”。

这样您就不必PYTHONPATH手动更改。如果您想使用开发代码,只需激活 virtualenv。

于 2009-06-16T15:39:10.793 回答
0

听起来src目录没有__init__.py文件。这不是一个合适的包。

于 2009-06-16T15:12:44.107 回答
0

我认为您将 PYTHONPATH 设置为 /home/me/build/project/src 因为 /home/me/dev/project/src 没有出现在 sys.path 中,但 /home/me/build/project/src 出现了。

于 2009-06-16T14:43:15.383 回答