我们有一个应用程序,它在使用 virtualenv 的 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
然而,这些都没有解决没有安装所需支持库的棘手问题。您可以尝试从旧库的位置创建一个指向新库的符号链接(symbolic link) - 可能 NetCDF4
可以与多个版本的 libnetCDF
一起使用,并且配置不当一个特定的版本。否则,解决这个问题可能会变得漫长而痛苦。
关于python - 一个python虚拟环境和具体的系统库有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39576125/