Заставить python использовать более старую версию модуля (чем то, что я установил сейчас)

Мой работодатель имеет выделенный модуль 1, который мы используем для внутреннего тестирования системы / системы; однако автор этого модуля больше не работает здесь, и меня попросили протестировать некоторые устройства с ним.

Проблема в том, что pyfoo требует древнюю версию twisted (v8.2.0) и импортирует twisted в 33 разных файла. Я попытался pyfoo модульные тесты pyfoo под v11.0.0, и я даже не вижу TCP SYN-пакеты 2 . К сожалению, у меня уже есть витая v11.0.0, установленная на моем лабораторном сервере linux, и у меня есть свой собственный код, который зависит от него.

Я искал свой мозг для этого, но я могу только придумать следующие варианты:

Вариант A. Установите новую версию python, установите virtualenv , а затем установите старую версию twisted под virtualenv . pyfoo тесты, требующие pyfoo в этой новой версии python.

Вариант B. Измените все 33 файла со следующими параметрами: DIR = '../'; sys.path.insert(0, DIR) DIR = '../'; sys.path.insert(0, DIR) и установить старую версию python в соответствующий каталог под источником.

Вариант C. Попытка исправить pyfoo для использования v11.0.0 3

Есть ли какие-то варианты, которые мне не хватает? Есть ли более элегантный способ решить эту проблему, помимо варианта A, выше?


END-ПРИМЕЧАНИЯ:

  1. Назовем это pyfoo ради аргумента
  2. Модульные тесты подключаются к одному из наших локальных лабораторных серверов и выполняют базовые функции telnet
  3. Этот вариант почти не стартовый … pyfoo не является тривиальным, и у меня есть короткий срок для этой работы.

Лучшей версией варианта Б. было бы заменить

 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 docs

Я не могу сказать вам, что лучше всего в вашей ситуации, но вы можете подумать:

Вариант D: запустить его на виртуальной машине (например, с Windows 7)

Вариант E: установить старую версию python / twisted на другой машине

Если решение SingleNegationElimination не работает, имейте в виду, что вам не нужно заменять все 33 экземпляра импорта; вам нужно только изменить sys.path в точках входа; например, вы можете настроить таргетинг только на файлы __init__.py вашего модуля.

Там вы вставляете, например

 import sys sys.path.insert(0, DIR)