Eu estou trabalhando em um projeto Python com a estrutura de pastas básicas listadas abaixo, e exemplos do que cada arquivo Python contém é entre chaves.
| generate_recommendations.py
├───.ipynb_checkpoints
├───.vscode
├───csv
├───dao
| | ratingDAO.py { contains a class named RatingDAO }
│ ├───config
│ ├───core
| | rating.py { contains a class named Rating }
│ ├───db
OBJETIVO : Quero rating.py importação em ratingDAO.py, e por sua vez deseja importar ratingDAO.py em generate_recommendations.py, e tem todas as importações de trabalho.
Eu adicionei a seguinte declaração de importação no arquivo ratingDAO.py
from core.rating import Rating
E eu também adicionou a seguinte declaração de importação no generate_recommendations.py arquivo
from dao.ratingDAO import RatingDAO
Quando eu executar ratingDAO.py, ele é executado sem qualquer erro.
Mas quando tento executar generate_recommendations.py, eu recebo o seguinte erro
Traceback (most recent call last):
File "generate_recommendations.py", line 3, in <module>
from dao.ratingDAO import RatingDAO
File "D:\MEGASync\BSc Computer\Research Papers\recommendation-engine\dao\ratingDAO.py", line 3, in <module>
from core.rating import Rating
ModuleNotFoundError: No module named 'core'
Eu sou incapaz de resolver o erro. Tenho visto mensagens aproximadamente dez sobre StackOverflow relacionados com as importações aninhadas, mas eu era incapaz de encontrar exemplos onde o autor tentou importar dois níveis de profundidade.
Se essas importações não são possíveis em Python, estou aberto a idéias sobre como eu deveria ir sobre como gerenciar os arquivos no meu projeto Python.
Em Java, eu usei a seguinte estrutura pasta,
├───recommendation
| | GenerateRecommendations.java
│ ├───core
| | Rating.java
│ └───dao
| RatingDAO.java
e usado o seguinte código para importar Rating.java em RatingDAO.java,
import recommendation.core.Rating;
e usado para o seguinte código para importar RatingDAO.java em GenerateRecommendations.java
import dao.RatingDAO;
e tudo teria dado certo, mas o mesmo não estava trabalhando para Python é por isso que eu escolhi a estrutura inicial pasta especificada.
PS Esta é a minha primeira vez fazendo uma pergunta sobre StackOverflow. Eu tentei o meu melhor para descrever o meu problema, referindo-se outras mensagens. Desculpas antecipadamente se não corresponder aos padrões de boas perguntas.
Esperando por uma resposta! :-)
Quando você executar python generate_recommendations.py
isso coloca diretório do script no caminho ( sys.path
que é procurado por módulos ao importar). Quando você usa from core.rating import Rating
em ratingDAO.py
seguida, ele irá procurar o caminho para um pacote chamado core
mas desde que o dao
diretório não está no caminho não pode ser encontrado.
Uma solução é a utilização de uma importação relativa no ratingDAO.py
módulo:
from .core.rating import Rating
Desta forma, ele irá procurar em relação à sua própria localização para o core
pacote. Se você deseja executar ratingDAO.py
a partir do diretório de nível superior pode fazê-lo via python -m dao.ratingDAO
(este posto é o diretório de trabalho atual no caminho e então procura sys.path
por um módulo chamado dao.ratingDAO
e executa-lo).
Ou você pode usar uma importação absoluta em relação ao diretório de nível superior da hierarquia:
from dao.core.rating import Rating