/ Dynamické vytváranie modulu v systéme sys.modules spôsobuje, že sys sa stane Žiadne - python

Dynamicky vytvárajúci modul v systéme sys.modules spôsobuje, že sys sa stane Žiadne - python

Vytváram modul nazvaný Qt (Github link), kde som alias iného modulu (napríklad PyQt4), takže keď importujem Qt Vlastne dovážam PyQt4:

from Qt import QtWidgets  # this really imports PyQt4.QtGui

príklad Qt modul:

# Qt.py
import sys
import PyQt4.Qt

sys.modules["Qt"] = PyQt4
PyQt4.QtWidgets = PyQt4.QtGui

Ak však pridám print sys na konci Qt.py, sys rovná None:

print sys
>>> None

Prečo sys "prestávka" a môžem ho zabrániť rozbitiu?

Toto je v systéme Python 2.7.11 na OS X.


@ Lol4t0 - Tu je príklad, kde používam len štandardné moduly:

# Xyz.py

import os
import sys

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

Takto importovanie povedie k tomu, že "None is printed:

$ python
Python 2.7.11 (default, Jan 22 2016, 08:29:18)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Xyz
None

odpovede:

3 pre odpoveď č. 1

Keď už nie je žiadny odkaz na modul, stratí všetky jeho globály tým, že ich nahradí None.

Musíte si pamätať starý verion of sys.modules["Xyz"] (t.j. súčasný modul), až kým nie je vykonaný.