linux 强制python使用旧版本的module(比我现在安装的版本要旧)

tpxzln5u  于 2023-08-03  发布在  Linux
关注(0)|答案(5)|浏览(111)

我的雇主有一个专门的模块1,用于内部单元/系统测试;但是,这个模块的作者不再在这里工作,我被要求用它测试一些设备。
问题是pyfoo需要twisted的旧版本(v8.2.0),它在33个不同的文件中导入twisted。我试着在v11.0.0下运行pyfoo的单元测试,但我甚至看不到TCP SYN包2。不幸的是,我已经在我的实验室linux服务器上安装了twisted v11.0.0,而且我有自己的代码依赖于它。
要解决这个问题,我只有提出以下几个方案:

  • 选项A*.安装新版本的python,安装virtualenv,然后在virtualenv下安装旧版本的twisted。在这个新版本的python下,只运行需要pyfoo的测试。
  • 选项B*。使用以下命令编辑所有33个文件:DIR = '../'; sys.path.insert(0, DIR)并在源代码下的相应目录中安装旧版本的python。
  • 选项C*.尝试修复pyfoo以使用v11.0.03

我是否遗漏了任何选项?除了上面的选项A之外,还有更好的方法来解决这个问题吗?

尾注:

1.为了便于讨论,我们将其命名为pyfoo
1.单元测试连接到我们的一个本地实验室服务器,并练习基本的telnet功能
1.这个选项几乎是不可能的... pyfoo并不是微不足道的,我对这项工作的最后期限很短。

vom3gejh

vom3gejh1#

选项B的更好版本。将取代

import twisted

字符串

import pkg_resources
pkg_resources.require("Twisted==8.2.0")
import twisted


只要安装了twisted,它就会安排导入正确的twisted版本,否则会引发异常。这是一个更便携的解决方案。
但是,如果twisted在pkg_resources.require被调用之前被导入,这将不起作用(选项B的任何其他变量也是如此); twisted将已经在sys.modules

  • OP编辑 *:根据pkg_resources文档进行轻微语法校正
ggazkfy8

ggazkfy82#

如果SingleNegationElimination的解决方案不起作用,请注意您不需要替换导入的所有33个示例;只需要在入口处修改sys.path;例如,您可以只针对模块的__init__.py文件。
在这里你可以插入例如。

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

字符串

j2datikz

j2datikz3#

我花了一点时间尝试和错误来解决我的情况;其中包括接受的答案和它的附加注解(提到添加__requires__):

__requires__= 'twisted==8.2.0'
import pkg_resources
pkg_resources.require("twisted==8.2.0")
import twisted

字符串

hwamh0ep

hwamh0ep4#

我不能告诉你在你的情况下什么是最好的,但你可以考虑:
选项D:在虚拟机中运行它(例如。Windows 7)
选项E:在另一台机器上安装旧版本的python/twisted

owfi6suc

owfi6suc5#

您应该在导入之前进行卸载和安装。
首先

!pip uninstall igraph -y
!pip uninstall python-igraph -y
!pip install python-igraph==0.9.6
!pip install cairocffi

字符串
然后,

import igraph
print(igraph.__version__)
% 0.9.6

相关问题