我的情况如下:
/usr/local/lib/site-packages
上有一个x.pth
文件,其中包含错误安装numpy的路径/usr/local
和/usr/local/bin
添加到我的PATH中(这是一个假设,而不是已知的事实)。sys.path
。当我运行python -S
时,它不在那里。 site.PREFIXES
不包含/usr/local
。我不知道为什么要加载上面提到的pth文件。import sys; sys.path.remove('pth/to/faulty/numpy')
这会失败,因为加载该pth文件时,sys中的错误路径尚未出现。路径。有没有办法让我禁用加载所说的pth文件,或者在加载python之前从sys.path中删除路径?
我已尝试设置virtualenv,但它不适合我目前的情况。
答案 0 :(得分:2)
我终于设法解决了这个问题 - 我的site-packages库有一个easy_install.pth
文件,其中包含由于某种原因导致的错误numpy,而不是/usr/local/lib/site-packages
上的x.pth文件。
在我花了大量时间之后,如果其他人来到这里,我会分享一些我学到的东西:
如果您有本地安装的python,将不会搜索' / usr / local / lib'默认情况下。如果您想知道它搜索的位置,请运行:
import site
print site.PREFIXES
python在这里搜索路径+ lib/python2.X/site-packages
。它描述了here
根据这些文档,您实际上可以使用sys.path。如果您将usercustomize
模块添加到本地站点包(import site; site.getusersitepackages()
),它将会运行。然而,这花了我时间去实现 - 它发生在python处理位于您的站点包的pth
文件之后,并且在他处理它们之前。如果我将一个print语句添加到执行此操作的方法(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文件有机会再运行一次!
答案 1 :(得分:-1)
无法删除 pth文件。
标准python将在/usr/lib
和/usr/local/lib
中搜索pth文件。
您可以通过 viartualenv 创建隔离的python。