我的雇主有一个专用模块1 ,我们用于内部单元/系统测试;然而,这个模块的作者不再在这里工作,我被要求用它测试一些设备。
问题是 pyfoo
需要古老版本的 twisted
(v8.2.0) 并且它在 33 个不同的文件中导入 twisted
。我尝试在 v11.0.0 下运行 pyfoo
的单元测试,我什至没有看到 TCP SYN 数据包2 。不幸的是,我已经在我的实验室 linux 服务器上安装了 twisted v11.0.0 ,并且我有自己的代码依赖于它。
为了解决这个问题,我只提出了以下选项:
选项 A。 安装新版本的python,安装 virtualenv
,然后在 twisted
virtualenv
。只在这个新版本的python下运行需要 pyfoo
的测试。
选项 B。 使用以下内容编辑所有 33 个文件: DIR = '../'; sys.path.insert(0, DIR)
并将旧版本的 python 安装在源代码下方的相应目录中。
选项 C。 尝试修复 pyfoo
以使用 v11.0.0 3
我有什么选择吗?除了上面的选项 A,还有更优雅的方法来解决这个问题吗?
**尾注:**
- 让我们称之为
pyfoo
为了争论 - 单元测试连接到我们的本地实验室服务器之一并练习基本的 telnet 功能
- 这个选项几乎是不可能的……
pyfoo
不是微不足道的,而且我的工作期限很短。
原文由 Mike Pennington 发布,翻译遵循 CC BY-SA 4.0 许可协议
选项 B 的更好版本是替换
经过
只要安装了正确版本的twisted,它将安排导入,否则会引发异常。这是一个更便携的解决方案。
但是,如果在调用
pkg_resources.require
之前导入了twisted,这将不起作用(选项B的任何其他变体也不会起作用);twisted
已经在sys.modules
_OP 编辑_:根据
pkg_resources
文档 进行轻微语法更正