Mik*_*ton 18 python linux twisted python-import
我的雇主有一个专用模块1,我们用于内部单元/系统测试; 但是,这个模块的作者不再在这里工作,我被要求用它测试一些设备.
问题是pyfoo需要古老版本的twisted(v8.2.0)并且它导入twisted了33个不同的文件.我尝试pyfoo在v11.0.0下运行单元测试,我甚至没有看到TCP SYN数据包2.不幸的是,我已经在我的实验室linux服务器上安装了扭曲的v11.0.0,并且我有自己的代码依赖于它.
为了解决这个问题,我一直在绞尽脑汁,但我只能提出以下选择:
选项A.安装新版本的python,安装virtualenv,然后安装旧版本twisted的virtualenv.只运行pyfoo在这个新版本的python下需要的测试.
选项B.使用以下内容编辑所有33个文件:DIR = '../'; sys.path.insert(0, DIR)并在源代码下面的相应目录中安装旧版本的python.
选项C.尝试修复pyfoo使用v11.0.0 3
我有什么选择吗?除了上面的选项A之外,还有更优雅的方法来解决这个问题吗?
pyfoo为了争论而称之为pyfoo这不是一件轻而易举的事,而且这项工作的截止日期很短.Sin*_*ion 32
选项B的更好版本将是替换
import twisted
Run Code Online (Sandbox Code Playgroud)
通过
import pkg_resources
pkg_resources.require("Twisted==8.2.0")
import twisted
Run Code Online (Sandbox Code Playgroud)
这将安排正确版本的扭曲导入,只要它已安装,否则引发异常.这是一种更便携的解决方案.
但是,如果pkg_resources.require在调用gets之前导入twisted,则这将不起作用(选项B的任何其他变量也不会); twisted已经在sys.modules
OP编辑:每个文档的次要语法更正pkg_resources
如果 SingleNegationElimination 的解决方案不起作用,请注意您不需要替换导入的所有 33 个实例;只需要sys.path在入口点进行修改即可;例如,您可以仅针对模块的__init__.py文件。
在那里你可以插入例如
import sys
sys.path.insert(0, DIR)
Run Code Online (Sandbox Code Playgroud)