python - Python3 导入
问题描述
我正在寻找一种导入模块的方法,以便我可以从子文件夹project/v0
和根文件夹运行脚本project
我在 python 3.6 中的文件结构(这就是没有初始化文件的原因)
project
├── api.py
├── v0
│ ├── SearchEngine.py => contains SearchEngine class
│ └── SearchEngineBE.py
我的 SearchEngineBE.py 模块包含
from SearchEngine import SearchEngine
我的 api.py 模块包含
from v0.SearchEngineBE import SearchEngineBE
step1:当project/v0
我运行python3 SearcheEngineBE.py
我的模块时,我的模块被正确导入,一切顺利。
step2:但是,当project
我运行时,python3 run api.py
我得到了错误:
Traceback (most recent call last):
File "api.py", line 3, in <module>
from v0.SearchEngineBE import SearchEngineBE
File "/xxx/project/v0/SearchEngineBE.py", line 3, in <module>
from SearchEngine import SearchEngine
ModuleNotFoundError: No module named 'SearchEngine'
我该如何解决这个问题,以便第 1 步和第 2 步都可以工作?
解决方案
解释器在当前目录(以及任何其他搜索路径)中搜索非相对导入。
您可以在SearchEngineBE.py
文件中使用相对导入来让解释器知道您需要相对模块,而不是导入路径之外的模块:
# SearchEngineBE.py
from .SearchEngine import SearchEngine
让.
解释器知道您正在引用相对于当前模块的模块。您至少需要一个与相对导入__init__.py
相同的目录中的空白文件SearchEngine.py
才能工作:
需要这些
__init__.py
文件才能使 Python 将包含该文件的目录视为包。
https://docs.python.org/3/tutorial/modules.html
有关更多讨论,请参阅本指南:https ://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html#absolute-vs-relative-import
编辑: 没有根包,这是行不通的。请参阅这篇文章以了解另一种方法:从 Python 中的相邻文件夹导入模块
推荐阅读
- django - 如何不计算 Django ORM 中同一用户在一天内创建的对象?
- python-3.x - 使用 findall() 查找文件中的所有匹配项并打印整行
- c++ - 我可以将基类提升为子类吗?
- php - 我怎样才能像这样在php上循环
- airflow - Airflow DAG:我的执行在第一个任务后“终止”
- python - Python3:导入openpyxl时出现Win错误193
- python-3.x - 第三行由于某种原因没有出现
- python - 条件语句内嵌套循环的中断命令
- python - 如何通过命令行下载节的模型?
- excel - 使用 IF、INDEX、MATCH 函数计算日期之间的天数