python虚拟环境和特定系统库之间的关系是什么?

时间:2016-09-19 14:51:25

标签: python linux virtualenv

我们有一个应用程序,它使用virtualenv在python虚拟环境设置中用Python完成一些工作。

我们遇到的问题是系统库的版本与虚拟环境中安装的版本不匹配。我们已将NetCDF4安装到虚拟环境中,之前已通过libnetcdf.so.7安装了yum。 python包看起来依赖于libnetcdf.so.7可用。

由于系统更新libnetcdf.so.7已不再存在且已被libnetcdf.so.11替换。

所以问题是:设置虚拟环境是否检测系统库版本或是否有其他机制?我们还需要重新构建环境来解决这个问题,还是有其他选择?

1 个答案:

答案 0 :(得分:0)

使用virtualenv创建虚拟环境时,您可以选择是否将标准站点包作为环境的一部分包含在内。由于这是现在的默认行为(尽管可以通过在命令行中使用--no-site-packages来声明),但您可能正在使用不支持此版本的旧版virtualenv。

在这种情况下,您应该能够相当轻松地重新创建环境。首先使用commmand

捕获现有环境中当前安装的软件包
pip freeze > /tmp/requirements.txt

然后删除虚拟环境,并使用以下命令重新创建它:

virtualenv --no-site-packages envname
source envname/bin/activate
pip install -r /tmp/requirements.txt

然而,这些都没有解决没有安装所需支持库的棘手问题。您可以尝试从旧库的位置创建指向新库的符号链接 - 可能NetCDF4可以使用多个版本的libnetCDF,并且只是配置错误以使用特定版本。如果没有那么解决这个问题可能会变得漫长而痛苦。