python:运行时使用 pkg_resources 的多个库版本(pkg_resources.VersionConflict 错误)
Posted
技术标签:
【中文标题】python:运行时使用 pkg_resources 的多个库版本(pkg_resources.VersionConflict 错误)【英文标题】:python : multiple library versions at run time with pkg_resources (pkg_resources.VersionConflict error) 【发布时间】:2012-03-24 22:38:02 【问题描述】:我正在尝试在同一个 python 脚本中使用同一个库的两个不同版本(使用 easy_install --multi-version 安装)。大致思路如下代码所示。
如果我单独调用每个版本,一切都很好。如果我想调用一个版本然后调用另一个版本,则会收到 VersionConflict 错误。
在加载另一个分发之前,必须有一种方法可以从工作集中“卸载”以前的分发,但我似乎总是在阅读 pkg_resources manual 时迷路。
谁能指出我解决这个问题的正确方法?非常感谢。
#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
def test1():
import pkg_resources
pkg_resources.require('obspy.core==0.6.2')
import obspy.core
try:
print obspy.core.__version__
except:
print "Can not read obspy.core version"
def test2():
import pkg_resources
pkg_resources.require('obspy.core==0.4.8')
import obspy.core
try:
print obspy.core.__version__
except:
print "Can not read obspy.core version"
if __name__ == '__main__':
test1()
test2()
【问题讨论】:
【参考方案1】:你有没有尝试在模块已经导入的情况下使用reload(module)
?
Reload
【讨论】:
如reload(pkg_resources)
?是的,我仍然得到版本冲突。我做错了吗?我也应该重新加载obspy吗?按什么顺序?
不,谢谢 Stefan 的建议,但它仍然不起作用。
如果将不同的导入放在不同的模块中会怎样?使用 sys.getrefcount(pkg_resources) 您可以查看是否有任何东西仍在使用该对象,如果是这样,那么重新加载将保留一些“旧”的东西并导致问题
即使我将每个导入都放在自己的模块中,我仍然会遇到相同的错误。我不太明白sys.getrefcount(pkg_resoursces)
显示的内容:当我导入 pkg_resources 时,计数为 3,在我导入 obspy 后,计数仍为 3,如果我重新加载 pkg_resources,计数为 7。似乎不仅没有被卸载,而是它被“加载”在自身的“顶部”。尽管如此,感谢您的所有帮助,如果没有它,我将无处可去;)以上是关于python:运行时使用 pkg_resources 的多个库版本(pkg_resources.VersionConflict 错误)的主要内容,如果未能解决你的问题,请参考以下文章
Python:ImportError:没有名为 pkg_resources 的模块 [重复]
linux报错pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: ‘0.23ubuntu1’
python 首先使用setuptools_scm获取Python项目版本,然后使用pkg_resources
pkg_resources.resource_filename 没有提取文件
mlflow执行import mlflow 报错:ImportError: No module named 'pkg_resources'