/ / Criando módulo dinamicamente em sys.modules faz com que sys se torne None - python

Criar módulo dinamicamente em sys.modules faz com que sys se torne None - python

Eu estou criando um módulo chamado Qt (Link do Github) onde alias outro módulo (por exemplo PyQt4), para que quando eu importar Qt Eu estou de fato importando PyQt4:

from Qt import QtWidgets  # this really imports PyQt4.QtGui

Exemplo Qt módulo:

# Qt.py
import sys
import PyQt4.Qt

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

No entanto, se eu adicionar print sys no final do Qt.py, sys é igual a None:

print sys
>>> None

Porque sys "quebrar" e posso evitar quebrá-lo?

Isso está no Python 2.7.11 no OS X.


@ Lol4t0 - Aqui está um exemplo onde eu estou usando apenas módulos padrão:

# Xyz.py

import os
import sys

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

Portanto, importar isso resultará em "Nenhum é impresso:

$ 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

Respostas:

3 para resposta № 1

Quando não houver mais nenhuma referência a um módulo, ele descartará todos os seus globais, substituindo-os por None.

Você precisa lembrar do velho verion de sys.modules["Xyz"] (ou seja, o módulo atual) até terminar de executá-lo.