erro ModuleNotFound em Python ao tentar importar módulos aninhados

Ranajoy Saha:

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! :-)

um convidado :

Quando você executar python generate_recommendations.pyisso coloca diretório do script no caminho ( sys.pathque é procurado por módulos ao importar). Quando você usa from core.rating import Ratingem ratingDAO.pyseguida, ele irá procurar o caminho para um pacote chamado coremas desde que o daodiretório não está no caminho não pode ser encontrado.

Uma solução é a utilização de uma importação relativa no ratingDAO.pymódulo:

from .core.rating import Rating

Desta forma, ele irá procurar em relação à sua própria localização para o corepacote. Se você deseja executar ratingDAO.pya 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.pathpor um módulo chamado dao.ratingDAOe 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

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=364734&siteId=1
Recomendado
Clasificación