我的情况如下:
- 我有一个本地安装的 python 版本。还有一个全局的,安装不好,我不想使用。 (我没有管理员权限)。
- 在
/usr/local/lib/site-packages
上有一个x.pth
文件,其中包含错误安装 numpy 的路径 - 我的 PYTHONPATH 没有任何这些路径。但是,一些管理员生成的脚本将
/usr/local
和/usr/local/bin
添加到我的 PATH(这是一个假设,而不是已知事实)。 - 这会以某种方式导致将错误的 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,而不是 /usr/上的 x.pth 文件local/lib/site-packages
.
在我花了大量时间之后,如果有人来到这里,我将分享我学到的一些东西:
如果您在本地安装了 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
文件之后,并且在他再次处理它们之前。如果我将打印语句添加到执行此操作的方法 (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 文件之后有机会再运行一次!
关于python - 防止 python 加载 pth 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710724/