Заставить python использовать более старую версию модуля (чем то, что я установил сейчас)
у моего работодателя есть специальный модуль1 мы используем для внутреннего отдела тестирования / системы; однако автор этого модуля больше не работает здесь, и меня попросили протестировать некоторые устройства с ней.
проблема в том, что pyfoo
требуется древняя версия twisted
(v8.2.0) и импортирует twisted
в 33 разных файлов. Я пытался бежать pyfoo
модульные тесты под v11.0.0 и я даже не вижу TCP SYN пакеты2. К сожалению, у меня уже получил витая В11.0.0 установлен на моем лабораторном сервере linux, и у меня есть свой собственный код, который зависит от него.
я ломал свой мозг, чтобы обойти это, но я могу придумать только следующие варианты:
Вариант A. Установите новую версию python, install virtualenv
, а затем установить старую версию twisted
под virtualenv
. Только запустите тесты, требующие pyfoo
под этой новой версией питон.
Вариант B. Отредактируйте все 33 файла следующим образом:DIR = '../'; sys.path.insert(0, DIR)
и установите старую версию python в соответствующий каталог под исходным кодом.
Вариант C. Попытка исправить pyfoo
использовать v11.0.03
есть ли какие варианты я пропустил? Есть ли более элегантный способ решить эту проблему, кроме варианта, наверху?
КОНЕЦ-ПРИМЕЧАНИЯ:
- давайте его
- модульные тесты подключаются к одному из наших локальных лабораторных серверов и выполняют основные функции telnet
- эта опция почти не стартер...
pyfoo
не тривиально, и у меня есть короткий срок для такой работы.
pyfoo
для аргументации
3 ответов
лучшей версией варианта B. было бы заменить
import twisted
by
import pkg_resources
pkg_resources.require("Twisted==8.2.0")
import twisted
который организует правильную версию twisted для импорта, пока она установлена, и вызывает исключение в противном случае. Это более портативное решение.
это не сработает, хотя (как и любой другой вариант варианта B), если twisted импортируется до pkg_resources.require
вызывается; twisted
уже в sys.modules
OP Edit: незначительная синтаксическая коррекция, per pkg_resources
docs
Я не могу сказать вам, что является лучшим в вашей ситуации, но вы могли бы рассмотреть:
вариант D: запустите его на виртуальной машине (например. с Windows 7)
вариант E: установите старую версию python / twisted на другую машину
Если решение SingleNegationElimination не работает, имейте в виду, что вам не нужно заменять все 33 экземпляра импорта; вам нужно только изменить sys.path
в точках входа; например, вы можете нацелиться только на ваш модуль __init__.py
файлы.
там будет вставить, например,
import sys
sys.path.insert(0, DIR)