Quero importar subpastas como módulos. Portanto, cada subpasta contém um __init__.py
. Minha estrutura de pastas é assim:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
No meu script principal eu importo
from dirFoo.foofactory import FooFactory
Neste arquivo de fábrica, incluo os submódulos:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Se eu chamar minha foofactory, recebo o erro, esse python não pode importar os submódulos foo1 e foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
python
import
module
subdirectory
Razer
fonte
fonte
__init__.py
a cada subpasta da qual você está importando.__init__.py
pode fazer o trabalho.Foo1
estivesse no diretório pai e outro codificado comofrom Foo1 import *
. Existe uma maneira de obter o mesmo efeito para que você não precise prefixar tudo comFoo1
?Só para avisar aqui. (de um newbee, keviv22)
Nunca e para o seu próprio bem, nomeie as pastas ou arquivos com símbolos como "-" ou "_". Se você fez isso, poderá enfrentar alguns problemas. como o meu, digamos, embora seu comando para importação esteja correto, você não conseguirá importar com sucesso os arquivos desejados que estão disponíveis dentro dessas pastas nomeadas.
Nomenclatura de pasta inválida conforme a seguir:
nomes de pasta válidos para acima:
Que erro eu cometi:
considere a estrutura do arquivo.
O que eu queria fazer?
Que comando eu fiz?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
Tentei muitas pesquisas e visualizei muitas perguntas sobre o stackoverflow e não consegui decidir o que deu errado. Eu cruzei meus arquivos várias vezes, usei o
__init__.py
arquivo, inseri o caminho do ambiente e fiquei extremamente preocupado com o que deu errado ...E depois de muito, muito tempo, descobri isso conversando com um amigo meu. Eu sou um pouco estúpido em usar essas convenções de nomenclatura. Nunca devo usar espaço ou símbolos especiais para definir um nome para qualquer pasta ou arquivo. Então, isso é o que eu queria transmitir. Tenha um bom dia!
(desculpe pela enorme postagem sobre isso ... apenas deixando minhas frustrações irem .... :) Obrigado!)
fonte
Defina sua variável de ambiente PYTHONPATH. Por exemplo, como este PYTHONPATH =.: .. (para a família * nix).
Além disso, você pode adicionar manualmente seu diretório atual (src no seu caso) ao pythonpath:
fonte
Digamos que seu projeto esteja estruturado desta forma:
Dentro
run.py
, você pode importar os scripts um e dois:Agora, ainda dentro
run.py
, você poderá chamar seus métodos com:fonte
Basta criar um arquivo ___init____.py vazio e adicioná-lo na raiz, bem como em todos os subdiretórios / pastas do seu aplicativo Python onde você tem outros módulos Python.
fonte
Teve problemas mesmo quando init .py existia na subpasta e tudo o que faltava era adicionar 'como' após a importação
fonte