python: несколько версий библиотеки во время выполнения с pkg_resources (ошибка pkg_resources.VersionConflict)

Я пытаюсь использовать два разных выпуска одной и той же библиотеки (установленной с помощью easy_install --multi-version) из одного и того же скрипта Python. Общая идея проиллюстрирована в коде ниже.

Если я вызываю каждую версию отдельно, все в порядке. Если я хочу вызвать одну версию, а затем другую, я получаю ошибку VersionConflict.

Должен быть способ «выгрузить» предыдущий дистрибутив из рабочего набора перед загрузкой другого, но я, кажется, всегда теряюсь, читая руководство по pkg_resources.

Может ли кто-нибудь указать мне правильный способ сделать это? Большое спасибо.

#!/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()

person Oliver Henriot    schedule 07.03.2012    source источник


Ответы (1)


Пробовали ли вы использовать reload(module) в тех случаях, когда модуль уже импортирован?

Перезагрузить

person StefanE    schedule 07.03.2012
comment
Как в reload(pkg_resources)? Да, я все еще получаю VersionConflict. Я делаю это неправильно? Должен ли я также перезагрузить obspy? В каком порядке? - person Oliver Henriot; 07.03.2012
comment
Нет, спасибо, что предложил это, Стефан, но это все равно не работает. - person Oliver Henriot; 08.03.2012
comment
Что, если вы поместите разные импорты в разные модули? С помощью sys.getrefcount(pkg_resources) вы можете увидеть, использует ли что-либо объект, и если это так, то перезагрузка сохранит некоторые старые вещи и вызовет проблему. - person StefanE; 08.03.2012
comment
Я все равно получаю ту же ошибку, даже если помещаю каждый импорт в отдельный модуль. Я не совсем понимаю, что мне показывает sys.getrefcount(pkg_resoursces): когда я импортирую pkg_resources, счет равен 3, после того, как я импортирую obspy, счет по-прежнему равен 3, если я перезагружу pkg_resources, счет равен 7. Кажется, мало того, что ничего не выгружается. а скорее то, что он загружается поверх самого себя. Тем не менее, спасибо за вашу помощь, без нее мне никуда;) - person Oliver Henriot; 09.03.2012