在Python中,我遇到了一个错误,因为它正在从/usr/lib/python2.6/site-packages
加载模块,但我希望它使用我在$HOME/python-modules/lib/python2.6/site-packages
中的版本,我使用pip-python --install-option="--prefix=$HOME/python-modules --ignore-installed
安装了它
如何告诉Python使用我的库版本?将PYTHONPATH
设置为$HOME/python-modules/lib/python2.6/site-packages
没有帮助,因为/usr/lib/...
显然具有优先级。
查看站点模块,了解自定义环境的方法。
实现这一点的一种方法是将一个文件添加到sys.path
上当前名为usercustomize.py
的位置,当Python启动时,它将自动导入该文件,您可以使用它来修改sys.path
。
首先,将$PYTHONPATH
设置为$HOME
(如果$PYTHONPATH
有值,则添加$HOME
),然后创建具有以下内容的文件$HOME/usercustomize.py
:
import sys, os
my_site = os.path.join(os.environ['HOME'],
'python-modules/lib/python2.6/site-packages')
sys.path.insert(0, my_site)
现在,当您启动Python时,您应该在sys.path
上的系统默认值之前看到您的自定义站点包目录。
较新的Python版本现在内置了搜索opendesktop位置的支持:
$HOME/.local/lib/pythonX.Y/site-packages
如果您将本地模块放在那里,就不必进行任何sys.path操作。
如果安装了多个版本的软件包,例如SciPy:
>>> import scipy; print(scipy.__version__); print(scipy.__file__)
0.17.0
/usr/lib/python3/dist-packages/scipy/__init__.py
如果希望首选用户安装的版本(例如使用pip install --user --upgrade scipy
安装),则需要~/.local/lib/python3.5/site-packages/
中的usercustomize.py文件,其中包含以下内容:
import sys, os
my_site = os.path.join(
os.environ['HOME'], '.local/lib/python%d.%d/site-packages' % (
sys.version_info[0], sys.version_info[1]))
for idx, pth in enumerate(sys.path):
if pth.startswith('/usr'):
sys.path.insert(idx, my_site)
break
else:
raise ValueError("No path starting with /usr in sys.path")
(for循环选择索引确保以"开发模式"安装的包优先)现在我们得到了SciPy:的用户特定版本
>>> import scipy; print(scipy.__version__); print(scipy.__file__)
0.18.1
/home/user/.local/lib/python3.5/site-packages/scipy/__init__.py
更喜欢安装在用户基础上的软件包(例如pip install --user --upgrade cool_thing
)
在~/.bashrc
、~/.profile
或shell的任何init文件中,添加
export PYTHONUSERBASE="$HOME/python-modules"
在$PYTHONUSERBASE/usercustomize.py
中
#!/usr/bin/env python
import sys, site
sys.path.insert(0, site.getusersitepackages())