防止python加载第p个文件

时间:2014-09-07 13:32:38

标签: 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中的错误路径尚未出现。路径。

有没有办法让我禁用加载所说的pth文件,或者在加载python之前从sys.path中删除路径?

我已尝试设置virtualenv,但它不适合我目前的情况。

2 个答案:

答案 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。