私は、下記の基本的なフォルダ構造を持つPythonプロジェクトに取り組んでいます、そしてそれぞれのPythonのファイルが含まれているものの例は、中括弧です。
| 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
目的:私はratingDAO.pyで輸入rating.pyにしたい、と順番にgenerate_recommendations.pyにratingDAO.pyをインポートすると、すべての輸入が働いています。
私は、ファイルに次のimport文を追加したratingDAO.py
from core.rating import Rating
そして、私はまた、ファイルgenerate_recommendations.pyに次のimport文を追加しました
from dao.ratingDAO import RatingDAO
私はratingDAO.pyを実行すると、それはエラーなしで実行されます。
私はgenerate_recommendations.pyを実行しようとする。しかし、私は次のエラーを取得します
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'
私は、エラーを解決することができません。私は、ネストされた輸入品に関連StackOverflowの上の約10の記事を見てきましたが、私は著者が深い二つのレベルをインポートしようとした例を見つけることができませんでした。
こうした輸入はPythonで可能でない場合、私は私が私のPythonプロジェクト内のファイルを管理取り掛かるべきかのアイデアを開いています。
Javaでは、私は、次のフォルダ構造を使用しただろう
├───recommendation
| | GenerateRecommendations.java
│ ├───core
| | Rating.java
│ └───dao
| RatingDAO.java
そして、RatingDAO.javaでRating.javaをインポートするには、次のコードを使用
import recommendation.core.Rating;
そして、使用GenerateRecommendations.javaにRatingDAO.javaをインポートするには、コードに次のよう
import dao.RatingDAO;
すべてが働いているだろうが、同じことが、私は、最初の指定したフォルダ構造を選んだ理由であるPythonのために働いていませんでした。
PSこれはStackOverflowの上で質問をして、私の最初の時間です。私は他の記事を参照して私の問題を記述するために全力を試してみました。事前に謝罪、それは良い質問の基準に一致しない場合。
返事を期待して!:-)
あなたが実行するとpython generate_recommendations.py
、このプット(パス上のスクリプトのディレクトリにsys.path
インポートするときにモジュールが検索されます)。あなたが使用する場合from core.rating import Rating
にはratingDAO.py
、それはというパッケージのパスを検索しますcore
が、以降dao
のディレクトリは、それが見つからないパス上にありません。
溶液は相対インポートを使用することであるratingDAO.py
モジュール。
from .core.rating import Rating
この方法は、それがために、独自の場所に比べて検索しますcore
パッケージ。あなたが実行したい場合はratingDAO.py
、トップレベルのディレクトリから、あなたは経由して行うことができますpython -m dao.ratingDAO
(パス上でこのプットの現在の作業ディレクトリ、次に検索sys.path
と呼ばれるモジュールのためdao.ratingDAO
にそれをして実行)。
それとも、階層の最上位ディレクトリへの絶対輸入相対を使用することができます。
from dao.core.rating import Rating