【发布时间】:2020-03-24 20:23:41
【问题描述】:
我正在开发一个 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,然后又想将 ratingDAO.py 导入 generate_recommendations.py,并让所有导入工作。
我在文件 ratingDAO.py 中添加了以下导入语句
from core.rating import Rating
而且我还在文件 generate_recommendations.py 中添加了以下导入语句
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;
并使用以下代码将 RatingDAO.java 导入 GenerateRecommendations.java
import dao.RatingDAO;
一切都会奏效,但同样不适用于 Python,这就是我选择初始指定文件夹结构的原因。
P.S 这是我第一次在 StackOverflow 上提问。我尽力通过参考其他帖子来描述我的问题。如果不符合好问题的标准,请提前道歉。
希望得到答复! :-)
【问题讨论】:
-
不要把这个当回事,但是 Python 没有每个文件 1 个类的 Java 限制。不要用 Python 编写 Java。 dirtsimple.org/2004/12/python-is-not-java.html 我意识到这并不能回答您的问题,但是您的模块结构对我来说似乎不必要地复杂。
ratingDAO.py { contains a class named RatingDAO }=> 我已经在想哈! Java 程序员 在您提到该语言之前。
标签: python python-3.x python-import importerror