python虚拟环境和特定系统库之间的关系是什么?
问题描述:
我们有一个应用程序,它使用virtualenv在python虚拟环境设置中执行一些Python工作。python虚拟环境和特定系统库之间的关系是什么?
我们遇到了系统库的版本与虚拟环境中安装的版本不匹配的问题。这就是我们已经将NetCDF4
安装到虚拟环境中,并且以前通过yum
安装了libnetcdf.so.7
。 python包似乎取决于有libnetcdf.so.7
可用。
由于系统更新libnetcdf.so.7
不再存在并已被libnetcdf.so.11
替换。
所以问题是这样的:设置虚拟环境检测系统库版本还是有其他一些机制?我们是否也需要重新构建环境来解决这个问题,或者还有其他选择吗?
答
当您使用virtualenv
创建虚拟环境时,您可以选择是否将标准网站包作为环境的一部分。由于这是现在的默认行为(虽然可以通过在命令行中使用--no-site-packages
来声明),但您可能正在使用不坚持这一点的旧版本的virtualenv。
在这种情况下,您应该能够相当容易地重新创建环境。首先,捕捉到现有环境当前已安装的软件包与条命令
pip freeze > /tmp/requirements.txt
然后删除虚拟环境,并用下面的命令重新创建:
virtualenv --no-site-packages envname
source envname/bin/activate
pip install -r /tmp/requirements.txt
但是没有这解决了没有安装所需支持库的棘手问题。您可以尝试从旧图书馆的位置创建一个到新图书馆的符号链接 - 可能NetCDF4
可以与多个版本的libnetCDF
一起使用,并且只是被严格配置为使用特定版本。如果不是,那么解决这个问题可能会变得漫长而痛苦。