Importações relativas pela bilionésima vez
Eu estive aqui:
http://www.python.org/dev/peps/pep-0328/http://docs.python.org/2/tutorial/modules.html#packagesPacotes Python: importações relativascódigo de exemplo de importação relativo python não funcionaResposta final às importações relativas de pythonImportações relativas em PythonPython: desativando a importação relativae muitas URLs que eu não copiei, algumas em SO, outras em outros sites, quando pensei em ter a solução rapidamente.
A pergunta sempre recorrente é a seguinte: com o Windows 7, Python 2.7.3 de 32 bits, como resolvo essa mensagem "Importação relativa à tentativa em não-pacote"? Eu construí uma réplica exata do pacote em pep-0328:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
Eu fiz funções chamadas spam e ovos em seus módulos apropriados. Naturalmente, não funcionou. A resposta está aparentemente na quarta URL que listei, mas é tudo para mim. Houve essa resposta em uma das URLs que visitei:
As importações relativas usam o atributo name de um módulo para determinar a posição desse módulo na hierarquia de pacotes. Se o nome do módulo não contiver nenhuma informação de pacote (por exemplo, está configurado como 'main'), as importações relativas serão resolvidas como se o módulo fosse um módulo de nível superior, independentemente de onde o módulo está realmente localizado no sistema de arquivos.
A resposta acima parece promissora, mas é tudo hieróglifos para mim. Então, minha pergunta, como faço com que o Python não retorne para mim "Attempted relative import in non-package"? tem uma resposta que envolve -m, supostamente.
Alguém pode me dizer por que o Python dá essa mensagem de erro,o que significa por não-pacote!, por que e como você define um 'pacote' ea resposta precisa colocar em termos fáceis o suficiente para um kindergartener entender.
Edit: As importações foram feitas a partir do console.