Skip to main content
 首页 » 编程设计

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

2025年05月04日16jyk

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

所以我认为这里的基本问题是 python 更喜欢 ~/.local/lib/python2.7/site-packages 中的 dateutil 包。在 /usr/lib/python2.7/dist-packages/dateutil 中。

如何让 python 更喜欢后者?

(我使用的是 Ubuntu 16.04)

请您参考如下方法:

我不认为有一种方法可以根据每个包选择从哪个目录加载包,但您可以更改 Python 查找包的顺序。订单反射(reflect)在sys.path .默认包搜索路径受 site-specific files 影响,但主要是:

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

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

env PYTHONNOUSERSITE=1 kalibr 

要查看包搜索路径,运行

python -m site 

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

(通常,选择 ~/.local 下的包而不是 /usr 下的包是正确的。理想情况下,包总是向后兼容的,如果你运行陷入不兼容,你只需使用 pip install --user 在 ~/.local 下安装最新版本。但在现实世界中,这并不总是有效出。)