我在 ~/.local/lib/python2.7/site-packages 目录和 /usr 中有一个 python 包 。当我尝试从 kalibr 运行可执行文件时(相机标定工具,我下载了CDE),dateutil/lib/python2.7/dist-packages/dateutil~/.local/lib/python2.7/site-中的 抛出错误“ImportError: No module named fractions”。我可以通过删除所述 dateutil包中的rrule.py packagesdateutil 包(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 影响,但主要是:
- 当前目录。
PYTHONPATH中列出的目录环境变量。- Python 自带的标准库。
~/.local下的dist-packages目录(user site-packages directory ),这是pip install --user安装的地方事物。您可以通过设置环境变量PYTHONUSERBASE来更改此目录的路径。并通过设置PYTHONNOUSERSITE完全禁用它为非空值。/usr/local下的dist-packages目录,这是pip install安装东西的地方。
所以如果需要先遍历一个目录,可以放在PYTHONPATH中。在您的情况下,您很有可能可以禁用 ~/.local 来运行 kalibr。
env PYTHONNOUSERSITE=1 kalibr
要查看包搜索路径,运行
python -m site
(所有这些也适用于 Python3。)
(通常,选择 ~/.local 下的包而不是 /usr 下的包是正确的。理想情况下,包总是向后兼容的,如果你运行陷入不兼容,你只需使用 pip install --user 在 ~/.local 下安装最新版本。但在现实世界中,这并不总是有效出。)
