首页 > 解决方案 > 安装多个版本时选择正确的模块进行导入

问题描述

语境

在提供的没有 root 访问权限的 Linux 服务器上,我必须预先安装 Python 包(例如,无法升级它们)。但是,我可以直接
轮子(.whlpip3 install /path/package_name --user

在我的特殊情况下,我想升级scikit-learn-package。这个软件包已经预装了,我无法升级它(root 访问权限缺失),但是,我可以在--user-folder 中安装较新的版本。

在文件系统中,我可以看到两个安装现在都存在于它们各自的文件夹中。两条路径都是 python 已知的(通过使用检查sys.path)。

问题/问题

当我通过导入scikit-learnimport sklearn并打印版本(sklearn.__version__--user

给定两个具有不同版本的相同模块的安装:如何在导入期间在 Python 中定义要加载的模块/版本?

前提是我不能禁用/卸载旧版本(再次root访问..)。

标签: pythonpython-3.xpip

解决方案


感谢@0 0,我能够找出解决方案以及解决方法:

解决方案

当我与shell 中sys.path的定义进行比较时(初始化就像在 SO 上回答一样),我看到 PYTHONPATH 不知道-文件夹(即使知道 - 这让我有点困惑)。PYTHONPATHPYTHONPATHsys.path--usersys.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

注意:如果您有依赖于它的依赖项,此解决方法将导致麻烦!因此,最好使用正确的解决方案。


推荐阅读