Заставить python использовать более старую версию модуля (чем то, что я установил сейчас)
У моего работодателя есть специальный модуль 1, который мы используем для внутреннего тестирования устройства / системы; однако автор этого модуля здесь больше не работает, и меня попросили протестировать некоторые устройства с ним.
Проблема в том, что pyfoo
требуется древняя версия twisted
(v8.2.0) и импортирует twisted
в 33 разных файлах. Я пробовал бегать pyfoo
модульные тесты под v11.0.0, и я даже не вижу пакетов TCP SYN 2. К сожалению, я уже установил Twisted v11.0.0 на мой лабораторный сервер Linux, и у меня есть свой собственный код, который зависит от него.
Я пытался обойти это, но я могу только предложить следующие варианты:
Вариант А Установите новую версию Python, установите virtualenv
, а затем установить старую версию twisted
под virtualenv
, Запускайте только тесты, требующие pyfoo
под этой новой версией python.
Вариант Б. Отредактируйте все 33 файла следующим образом: DIR = '../'; sys.path.insert(0, DIR)
и установите старую версию python в соответствующую директорию ниже исходного кода.
Вариант С. Попытка исправить pyfoo
использовать v11.0.0 3
Есть ли варианты, которые мне не хватает? Есть ли более элегантный способ решения этой проблемы, кроме варианта А, описанного выше?
END-ПРИМЕЧАНИЯ:
- Давайте назовем это
pyfoo
ради аргумента - Модульные тесты подключаются к одному из наших локальных лабораторных серверов и выполняют основные функции telnet
- Этот вариант почти не для начинающих...
pyfoo
не тривиально, и у меня есть короткий срок для этой работы.
5 ответов
Лучшей версией варианта В. будет замена
import twisted
от
import pkg_resources
pkg_resources.require("Twisted==8.2.0")
import twisted
которая организует импорт правильной версии витой версии, если она установлена, и в противном случае выдает исключение. Это более портативное решение.
Однако это не сработает (как и любой другой вариант варианта B), если витая импортируется до pkg_resources.require
вызывается; twisted
уже будет в sys.modules
OP Edit: небольшая коррекция синтаксиса, согласно pkg_resources
документы
Если решение SingleNegationElimination не работает, учтите, что вам не нужно заменять все 33 экземпляра импорта; вам нужно только изменить sys.path
в точках входа; Например, вы можете настроить таргетинг только на ваш модуль __init__.py
файлы.
Там вы вставите, например,
import sys
sys.path.insert(0, DIR)
Мне потребовалось немного проб и ошибок, чтобы исправить мою ситуацию; который включал принятый ответ и дополнительные комментарии (упоминание о добавлении _требует_)
__requires__= 'twisted==8.2.0'
import pkg_resources
pkg_resources.require("twisted==8.2.0")
import twisted
Я не могу сказать вам, что лучше в вашей ситуации, но вы могли бы рассмотреть:
Вариант D: запустить его на виртуальной машине (например, с Windows 7)
Вариант E: установить старую версию python/twisted на другую машину
Вы должны удалить и установить перед импортом.
Первый,
!pip uninstall igraph -y
!pip uninstall python-igraph -y
!pip install python-igraph==0.9.6
!pip install cairocffi
Затем,
import igraph
print(igraph.__version__)
% 0.9.6