Estou trabalhando em uma documentação (pessoal) para a biblioteca aninhada matplotlib (MPL), que difere da própria MPL fornecida, pelos pacotes de submodulos interessados. Estou escrevendo um script Python, que espero automatize a geração de documentos a partir de versões futuras do MPL.
Selecionei submódulos / pacotes interessados e quero listar suas principais classes a partir das quais gerarei a lista e a processarei compydoc
O problema é que não consigo encontrar uma maneira de instruir o Python para carregar o submódulo da string. Aqui está um exemplo do que eu tentei:
import matplotlib.text as text
x = dir(text)
.
i = __import__('matplotlib.text')
y = dir(i)
.
j = __import__('matplotlib')
z = dir(j)
E aqui está uma comparação de três maneiras das listas acima através do pprint:
Eu não entendo o que é carregado no y
objeto - é base matplotlib
mais alguma outra coisa, mas falta informações que eu queria e são as principais classes do matplotlib.text
pacote. É a parte superior azul na captura de tela ( x
lista)
Por favor, não sugira Sphinx como uma abordagem diferente.
fonte
__import__(str)
em vez doimport
statemetn padrão ?import
instrução Aqui está um exemplo de uso: djangosnippets.org/snippets/3048Respostas:
A
__import__
função pode ser um pouco difícil de entender.Se você mudar
para
então
i
irá se referir amatplotlib.text
.No Python 2.7 e Python 3.1 ou posterior, você pode usar
importlib
:Algumas notas
Se você estiver tentando importar algo de uma subpasta, por exemplo
./feature/email.py
, o código será semelhante aimportlib.import_module("feature.email")
Você não pode importar nada se não houver
__init__.py
na pasta com o arquivo que você está tentando importarfonte
importlib
deve estar disponível no pypi para <python2.7./feature/email.py
) o código será semelhanteimportlib.import_module("feature.email")
__init__.py
na pasta com o arquivo que você está tentando importar.import moduleName
onde moduleName é string. Que talfrom moduleName import *
?importlib.import_module
é o que você está procurando. Retorna o módulo importado. (Disponível apenas para Python> = 2.7 ou 3.x):Depois disso, você pode acessar qualquer coisa no módulo como
mymodule.myclass
, etc.fonte
imp.load_source(..)
usar oimp
módulo, conforme sugerido nesta resposta stackoverflow.com/questions/67631/…import moduleName
onde moduleName é string. Que talfrom moduleName import *
?passei algum tempo tentando importar módulos de uma lista, e esse é o segmento que me levou a maior parte do caminho até lá - mas não compreendi o uso de ___import____ -
aqui está como importar um módulo de uma string e obter o mesmo comportamento que basta importar. E tente / exceto o caso de erro também. :)
e sim, para python 2.7> você tem outras opções - mas para 2.6 <, isso funciona.
fonte
Eu desenvolvi estas 3 funções úteis:
E toda vez que quero recarregar uma nova instância, basta chamar getInstance () assim:
Finalmente, posso chamar todas as funções dentro da nova instância:
A única especificidade aqui é personalizar a lista de parâmetros (param1, param2, param3) da sua instância.
fonte
Além de usar o
importlib
one, também é possível usar oexec
método para importar um módulo de uma variável de string.Aqui estou mostrando um exemplo de importação do
combinations
método doitertools
pacote usando oexec
método:Resultado:
fonte