python - 安装多个版本时选择正确的模块进行导入
问题描述
语境
在提供的没有 root 访问权限的 Linux 服务器上,我必须预先安装 Python 包(例如,无法升级它们)。但是,我可以直接从
轮子(.whl
pip3 install /path/package_name --user
在我的特殊情况下,我想升级scikit-learn
-package。这个软件包已经预装了,我无法升级它(root 访问权限缺失),但是,我可以在--user
-folder 中安装较新的版本。
在文件系统中,我可以看到两个安装现在都存在于它们各自的文件夹中。两条路径都是 python 已知的(通过使用检查sys.path
)。
问题/问题
当我通过导入scikit-learnimport sklearn
并打印版本(sklearn.__version__
--user
给定两个具有不同版本的相同模块的安装:如何在导入期间在 Python 中定义要加载的模块/版本?
前提是我不能禁用/卸载旧版本(再次root访问..)。
解决方案
感谢@0 0,我能够找出解决方案以及解决方法:
解决方案
当我与shell 中sys.path
的定义进行比较时(初始化就像在 SO 上回答的一样),我看到 PYTHONPATH 不知道-文件夹(即使知道 - 这让我有点困惑)。PYTHONPATH
PYTHONPATH
sys.path
--user
sys.path
因此,我添加到我的.bashrc
:
cd # Go to the user folder where .bashrc is stored
nano .bashrc
export PYTHONPATH=$(python3 -m site --user-site)$PYTHONPATH
python3 -m site --user-site
标识--user
-folder的pip
用途。为了首先加载模块,请将其放在当前PYTHONPATH
.
sklearn
现在在 Python 中加载时,我得到了正确的版本。
解决方法
为了完整起见:也可以重命名 doubled 包并导入它。
cd $(python3 -m site --user-site) # Go to the folder pip installed the package while using --user
mv package_name package_name_new # Rename it
然后在 Python 中以这种方式加载它:
import package_name_new
注意:如果您有依赖于它的依赖项,此解决方法将导致麻烦!因此,最好使用正确的解决方案。