Como faço para que essas importações relativas funcionem no Python 3?
Eu tenho uma estrutura de diretórios que se parece com isso:
project/
__init__.py
foo/
__init.py__
first.py
second.py
third.py
plum.py
Emproject/foo/__init__.py
Eu importo classes defirst.py
, second.py
ethird.py
e colocá-los em__all__
.
Há uma aula emfirst.py
nomeadoWonderfulThing
que eu gostaria de usar emsecond.py
e deseja importar importando*
defoo
. (Está fora do escopo desta questão porque eu gostaria de fazer isso, suponha que eu tenha uma boa razão.)
Emsecond.py
eu tenteifrom .foo import *
, from foo import *
efrom . import *
e em nenhum desses casos éWonderfulThing
importado. Eu também tenteifrom ..foo import *
, que gera um erro "Tentativa de importação relativa além do pacote de nível superior".
Li os documentos e o PEP e não sei como fazer isso funcionar. Qualquer ajuda seria apreciada.
Esclarecimento / Edição: Parece que eu posso estar entendendo mal o caminho__all__
funciona em pacotes. Eu estava usando o mesmo que em módulos,
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
mas olhando para os documentos novamente, parece sugerir que__all__
só pode ser usado em pacotes para especificar os nomes dos módulos a serem importados por padrão; parece não haver nenhuma maneira de incluir qualquer coisa que não seja um módulo.
Isso está correto?
Editar: Uma importação não-curinga falhou (cannot import name WonderfulThing
). Tentandofrom . import foo
falhou, masimport foo
trabalho. Infelizmente,dir(foo)
não mostra nada.