我的情况如下:
- 我有本地安装的 python 版本。还有一个全局的,安装得很糟糕,我不想使用它。 (我没有管理员权限)。
- On
/usr/local/lib/site-packages
有一个x.pth
包含 numpy 错误安装路径的文件
- 我的 PYTHONPATH 没有任何这些路径。但是,一些管理员生成的脚本添加了
/usr/local
and /usr/local/bin
到我的路径(这是一个假设,不是已知的事实)。
- 这不知何故导致错误的numpy路径添加到我的
sys.path
。当我跑步时python -S
,它不在那里。
-
site.PREFIXES
不包括/usr/local
。我不知道为什么加载上述 pth 文件。
- 我尝试将我自己的 pth 文件添加到本地安装的 site-packages 目录中,执行以下操作
import sys; sys.path.remove('pth/to/faulty/numpy')
这会失败,因为当加载该 pth 文件时,错误路径尚未出现在 sys.path 中。
有没有办法让我禁用所述 pth 文件的加载,或者在加载 python 之前从 sys.path 中删除路径?
我尝试过设置 virtualenv,但它不适合我当前的情况。
我终于设法解决了这个问题 - 我的站点包库有一个easy_install.pth
由于某种原因包含错误的 numpy 文件,而不是 x.pth 文件/usr/local/lib/site-packages
.
在我花费了大量时间之后,如果其他人到达这里,我将分享我学到的一些东西:
-
如果你本地安装了pythonwill not默认情况下在“/usr/local/lib”中搜索。如果您想知道它在哪里搜索,请运行:
import site
print site.PREFIXES
python 在这里搜索路径 +lib/python2.X/site-packages
。是这样描述的here https://docs.python.org/2/library/site.html
-
根据这些文档,您实际上可以使用 sys.path。如果你添加usercustomize
模块到您的本地站点包(import site; site.getusersitepackages()
),它将被运行。然而,这花了我一些时间才意识到 - 它发生在 python 处理之后pth
文件位于您的站点包中,并在他再次处理它们之前。如果我向执行此操作的方法添加打印语句(lib/site.py addsitedir),它将打印以下内容:
/home/user/.local/lib/python2.7/site-packages
/home/user/py/lib/python2.7/site-packages
#This is where your code runs
/home/user/py/lib/python2.7/site-packages/numpy-1.9.0-py2.7-linux-x86_64.egg
/home/user/Develop/Python/myproject
/home/user/lmfit-0.7.2
/home/user/py/lib/python2.7/site-packages #NOTE: this runs a second time
一旦我在站点包中丢失了一个 pth 文件,我就无法用usercustomize
,因为该 pth 文件之后有机会再运行一次!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)