在sys.modules中动态创建模块会导致sys变为None

时间:2016-05-28 12:18:22

标签: python

我正在创建一个名为>>> print re.compile(r'at\s+((?:\w+(?:\s+|$)){3})').findall(str1) ['the train station '] Github link)的模块,其中我为另一个模块(例如Qt)添加别名,这样当我导入PyQt4时我就在导入Qt的事实:

PyQt4

示例from Qt import QtWidgets # this really imports PyQt4.QtGui 模块:

Qt

但是,如果我在Qt.py末尾添加# Qt.py import sys import PyQt4.Qt sys.modules["Qt"] = PyQt4 PyQt4.QtWidgets = PyQt4.QtGui ,则print sys等于sys

None

为什么print sys >>> None “打破”并且可以避免破坏它?

这是在OS X上的Python 2.7.11中。

@ Lol4t0 - 这是一个我只使用标准模块的例子:

sys

因此,导入此选项将导致“无打印:

# Xyz.py

import os
import sys

sys.modules['Xyz'] = os
print sys  # this will print "None"

1 个答案:

答案 0 :(得分:3)

当不再有对模块的引用时,它将通过用None替换它们来删除所有的全局变量。

在完成执行之前,您需要记住sys.modules['Xyz']版本(即当前模块)。