获取两个独立的Python模块实例

14 投票
6 回答
3218 浏览
提问于 2025-04-16 23:08

我正在使用一个用Python 2.x写的API,这个API的写法不是面向对象的,它用模块全局范围来处理一些内部状态的东西。现在的情况是,它不再是单例模式,而我们不能修改原来的代码(那不是我们的代码)。

除了使用子进程来运行不同的解释器之外,有没有办法把这些模块隔离开来,并与多个模块实例进行交互(这样就可以把它当作对象来使用)?

我需要用这个模块来驱动两个不同的设置,但它内部似乎无法同时处理这两个设置。

免责声明:请不要这样做。只有在非常特殊的情况下才考虑这样做,并且在采取这种方法之前,尽量用其他方式来解决问题。我这样做是为了应对一些在提问时无法更改的奇怪代码,而不是为了提供一种让更多奇怪代码扩散的方法。

6 个回答

3

你可以试着通过“欺骗”系统模块来解决问题。

import badmodule as badmod1

import sys
del sys.modules['badmodule']

import badmodule as badmod2

不过,这样做是否有效,当然要看那个有问题的模块具体在干什么……

16

只需要从 sys.modules 中移除这个模块就可以了:

>>> import sys
>>> import mod as m1
>>> m1.x = 1
>>> del sys.modules['mod']
>>> import mod as m2
>>> m2.x = 2
>>> m1.x
1
1

我自己没有用过,但看起来Exocet这个库可能会有帮助。

撰写回答