获取两个独立的Python模块实例
我正在使用一个用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这个库可能会有帮助。