python - 防止 python 加载 pth 文件

标签 python python-2.7 sys.path

我的情况如下:

  • 我有一个本地安装的 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/

相关文章:

Python C API : WindowsError after creating some number of PyObjects

python - Google App Engine,更改哪个python版本

python - 使用像 PMI 这样的 bigram_measures 时何时删除停用词?

python - 只保留每组元素中相互匹配的一个元素

python - 有没有更有效的方法来求大量矩阵的平均值?

python - 为什么在 Python 2.x 中使用 msvcrt 时会出现 IOError?

python - 如何将脚本的父目录作为模块加载,而不将该目录的父目录的所有兄弟添加到我的 sys.path 中?

python - virtualenv 使用不正确的 sys.path

2 的幂的 python itertools 排列太慢

python - gae 有没有 twitter 用户登录框架