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'

pkg_resources.VersionConflict 当我尝试开始粘贴服务时