如何忽略 ~/.local/lib/python2.7/site-packages 中的 python 模块?

tak*_*shi 3 python ubuntu python-2.7 python-dateutil

dateutil~/.local/lib/python2.7/site-packages目录中有一个 python 包,在/usr/lib/python2.7/dist-packages/dateutil. 当我尝试从kalibr(一种相机校准工具,我下载了 CDE)运行可执行文件时,rrule.pydateutil包中~/.local/lib/python2.7/site-packages抛出错误“ImportError: No module named fractions”。通过删除所述dateutil包(它使用 中的包),我可以让 kalibr 运行,/usr/lib/python2.7/dist-packages/dateutil但我担心这会对其他项目产生一些影响。

所以我想,基本的问题就在这里是蟒蛇喜欢的dateutil~/.local/lib/python2.7/site-packages过那个在/usr/lib/python2.7/dist-packages/dateutil

我怎样才能让python更喜欢后者?

(我使用的是 Ubuntu 16.04)

Gil*_*il' 5

我不认为有一种方法可以在每个包的基础上选择从哪个目录加载包,但是您可以更改 Python 查找包的顺序。顺序反映在 中sys.path。默认包搜索路径受站点特定文件的影响,但主要是:

  1. 当前目录。
  2. PYTHONPATH环境变量中列出的目录。
  3. Python 本身自带的标准库。
  4. dist-packages目录下~/.local(在用户站点包目录),这是在pip install --user安装的东西。您可以通过设置环境变量来更改此目录的路径,PYTHONUSERBASE并通过设置PYTHONNOUSERSITE为非空值来完全禁用它。
  5. 下的dist-packages目录/usr/local,这是pip install安装东西的地方。

所以如果需要先遍历一个目录,可以把它放在PYTHONPATH. 在您的情况下,您很有可能只是禁用~/.local运行 kalibr。

env PYTHONNOUSERSITE=1 kalibr
Run Code Online (Sandbox Code Playgroud)

要查看包搜索路径,请运行

python -m site
Run Code Online (Sandbox Code Playgroud)

(所有这些也适用于 Python3。)

(通常,更喜欢下面~/.local的包/usr而不是下面的包是正确的。理想情况下,包总是向后兼容的,如果你遇到不兼容的问题,你只需在~/.localwith下安装最新版本pip install --user。但在现实世界中,这不会并不总是有效。)