3

我的情况如下:

  • 我有一个本地安装的 python 版本。还有一个全局的,安装不好,我不想使用。(我没有管理员权限)。
  • 上面/usr/local/lib/site-packages有一个x.pth文件,其中包含错误安装 numpy 的路径
  • 我的 PYTHONPATH 没有任何这些路径。但是,一些管理员生成的脚本会添加/usr/local/usr/local/bin我的 PATH 中(这是一个假设,不是已知的事实)。
  • 这以某种方式导致添加到 my 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,但它不适合我目前的情况。

4

2 回答 2

3

我终于设法解决了这个问题——easy_install.pth由于某种原因,我的站点包库有一个包含错误 numpy 的文件,而不是 .pth 上的 x.pth 文件/usr/local/lib/site-packages

在我花费了大量时间之后,如果其他人来到这里,我将分享一些我学到的东西:

  • 如果您有本地安装的 python,默认情况下它不会在 '/usr/local/lib' 中搜索。如果您想知道它在哪里搜索,请运行:

    import site
    print site.PREFIXES
    

    python 在这里搜索路径 + lib/python2.X/site-packages这里有描述

  • 根据这些文档,您实际上可以使用您的 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 文件之后有机会再运行一次!

于 2014-09-07T21:20:34.637 回答
-2

没有办法删除pth 文件。/usr/lib标准 python 将在和中搜索 pth 文件/usr/local/lib

不过,您可以通过viartualenv创建隔离的 python 。

于 2014-09-07T13:58:04.373 回答