我的雇主有一个专用模块1用于内部单元/系统testing; 然而,这个模块的作者不再在这里工作,我被要求用它来testing一些设备。
问题是pyfoo
需要古代版本的twisted
(v8.2.0),并在33个不同的文件中导入twisted
。 我尝试在pyfoo
下运行pyfoo
的unit testing,甚至没有看到TCP SYN包2 。 不幸的是,我已经在我的实验室linux服务器上安装了扭曲的v11.0.0 ,我有我自己的代码,依赖于它。
我一直在为解决这个问题而绞尽脑汁,但我只能想出以下select:
选项A 安装新版本的python,安装virtualenv
,然后在virtualenv
下安装旧版本的twisted
。 在这个新版本的python下只运行需要pyfoo
的testing。
选项B 使用以下命令编辑全部33个文件: DIR = '../'; sys.path.insert(0, DIR)
DIR = '../'; sys.path.insert(0, DIR)
并在源代码下面相应的目录下安装旧版本的python。
选项C。 尝试修复pyfoo
使用v11.0.0 3
我有什么select吗? 除了上面的选项A之外,还有更好的方法来解决这个问题吗?
END-NOTES:
pyfoo
pyfoo
… pyfoo
不是微不足道的,我有这个工作的一个简短的截止date。 选项B的更好的版本将被替换
import twisted
通过
import pkg_resources pkg_resources.require("Twisted==8.2.0") import twisted
这将安排正确版本的扭曲进口,只要安装,并引发异常,否则。 这是一个更便携的解决方案。
这将不起作用,虽然(也不会有任何其他选项B的变化),如果在pkg_resources.require
被调用之前被导入,则会被导入; twisted
将已经在sys.modules
操作编辑 :小的语法更正,每个pkg_resources
文档
我不能告诉你什么是最适合你的情况,但你可以考虑:
选项D:在虚拟机中运行(例如使用Windows 7)
选项E:在另一台机器上安装老版本的python / twisted
如果SingleNegationElimination的解决方案不起作用,请注意,您不需要替换全部33个导入实例; 你只需要在入口点修改sys.path
; 例如你可以只定位你的模块的__init__.py
文件。
在那里你会插入例如
import sys sys.path.insert(0, DIR)