Python 忽略蟒蛇
环境:Debian4.0 Python 2.4 我的“项目”安装在: /usr/lib/python2.4/site-packages/project 但我想使用我的工作副本,而不是安装在以下位置的副本: /home/me/dev/project/src 所以我要做的是: 导出PYTHONPATH=/home/me/dev/project/src 伊皮顿 导入src中的foo#Python 忽略蟒蛇,python,path,debian,Python,Path,Debian,环境:Debian4.0 Python 2.4 我的“项目”安装在: /usr/lib/python2.4/site-packages/project 但我想使用我的工作副本,而不是安装在以下位置的副本: /home/me/dev/project/src 所以我要做的是: 导出PYTHONPATH=/home/me/dev/project/src 伊皮顿 导入src中的foo# foo.\uuuuu文件\uuuuuu */usr/lib/python2.4/site-packages/proje
foo.\uuuuu文件\uuuuuu
*/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
我认为您将PYTHONPATH设置为/home/me/build/project/src,因为/home/me/dev/project/src不出现在sys.path中,但/home/me/build/project/src出现在其中。我在“/home/me/dev/project/src”之前的路径中看到“/usr/lib/python2.4/site packages”,这有关系吗?当你切换这两个时会发生什么 从文档中: 如果未设置PYTHONPATH,或者未在其中找到文件,则搜索将在依赖于安装的默认路径中继续
因此,也许您没有像您所想的那样在PYTHONPATH上找到工作副本?我认为您无法控制PYTHONPATH插入实际路径列表的位置。但这不是修改路径的唯一方法-在尝试导入项目之前,您可以自己更新sys.path 编辑:在您的特定情况下,可以使用
import sys
sys.path.insert(2, '/home/me/dev/project/src')
根据python文档,这是预期的行为: 请注意,脚本目录是 在插入的条目之前插入 由于蟒蛇的缘故
在python-2.6下则不同:听起来好像
src
目录没有\uuuu init\uuuu.py
文件。它不是一个合适的包。不是对您的问题的直接回答,但您也可以使用来创建开发环境。在该virtualenv中,您可以将产品作为开发包安装在/home/me/dev/project/src
中:“python setup.py develop
”
这样,您就不必手动更改PYTHONPATH
。如果您想使用开发代码,只需激活virtualenv即可。我发现了问题(早些时候有人指给我看时,我错过了)
easy_install似乎创建了一个pth文件/usr/lib/python2.4/site-packages/easy-install.pth,然后由site.py加载。这将在PYTHONPATH之前的sys路径中插入站点包路径。不太好。谢谢你,大卫。sys.path确实包含/home/me/dev/project/src,而不是/home/me/build/project/src(因为我已经重命名了其中的一些内容,所以其中有一个错误)。问题依然存在。我认为John是对的,Python将使用sys.pathYes中索引最低的模块,这很重要。PYTHON,AFAIK,应该先插入PYTHONPATH(或者就在“.”之后)。我的PYTHONPATH是正确的。但是如果您犯了错误,例如在/home/me/dev/project/src中省略了init.py文件,那么PYTHON将继续在站点包
中找到prod包您是否尝试过交换我建议的sys.path中的两项?机器工作正常:>导出PYTHONPATH=foo>ipython>import sys>sys.path=['/etc/python2.4'、'/home/me/foo'、'/usr/lib/python24.zip'、'/usr/lib/python2.4'、'/usr/lib/python2.4/plat-linux2'、'/usr/lib/python2.4/lib-dynload'、'/usr/local/lib/python2.4/site-packages'、'/usr/lib/python2.4/site-packages/var/python2.4']在机器无法正常工作的情况下,/usr/lib/python2.4/site-packages出现在列表的前面……让我们提出一些精确的问题:每个人都同意,如果我将PYTHONPATH设置为有效的模块路径,那么不管怎样,它都应该首先加载该模块?每个人都同意python尝试按照sys.path的顺序加载模块?如果aboce是正确的,为什么python不在sys.path的开头插入PYTHONPATH(在鸡蛋之后)?所以我无法强制python在何处查找模块?这对我使用ipython notebook很有效,而在命令shell中设置PYTHONPATH则不行。谢谢。我对鸡蛋没问题。:)但是为什么“/usr/lib/python2.4/site packages”出现在我的python路径之前?我如何强制PYTHONPATH比“/usr/lib/python2.4/site-pac”优先级更高kages'而不更改python文件中的sys.path?@van.我不明白。我将PYTHONPATH设置为正确的值,然后它首先加载站点包中的内容。奇怪!要更改优先级,请不要运行位于站点包中的脚本。将脚本移到其他任何位置以及脚本的目录(站点包)不会再打乱您预期的搜索.Scripts目录?我正在导入一个模块,它位于站点包/project/foo.py和/home/me/dev/project/src/project/foo.py中。为了解决这个问题,让我们假设我希望能够使用ipython运行它。@joseph。请参阅我提供的链接:对于python-2.4,它实际上是定义的行为。它是从那以后发生了变化。正如您在上面看到的,有一个。@S.lott抱歉。我说的是“init.py`is there(in/home/me/dev/project/src
)。这只在您的项目具有setup.py
时有效,这不是保证