我正在寻找一种导入模块的方法,以便可以从子文件夹project/v0和根文件夹project运行脚本。
我在python3.6中的文件结构(这就是为什么没有init文件)
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'我如何解决这个问题,使第一步和第二步都能工作?
发布于 2019-05-29 13:34:37
非相对导入由当前目录中的解释器搜索(以及任何其他搜索路径)。
您可以在SearchEngineBE.py文件中使用相对导入来让解释器知道您需要的是相对模块,而不是导入路径之外的模块:
# SearchEngineBE.py
from .SearchEngine import SearchEngine.让解释器知道您引用的是一个相对于当前模块的模块。但是,您需要在与SearchEngine.py相同的目录中至少有一个空白的SearchEngine.py文件才能使相对导入工作:
需要使用
__init__.py文件才能将包含该文件的目录视为包。
https://docs.python.org/3/tutorial/modules.html
有关更多讨论,请参见本指南:https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html#absolute-vs-relative-import
编辑:没有根包的,这是行不通的。关于另一种方法,请参阅本文:Importing modules from a neighbouring folder in Python
发布于 2019-05-29 13:36:07
添加__init__.py使其成为package。(可能是空文件:__init__.py)
project
├── __init__.py
├── api.py
├── v0
│ ├── SearchEngine.py => contains SearchEngine class
│ └── SearchEngineBE.py编辑1:
试着:
from project.v0.SearchEngine import SearchEnginehttps://stackoverflow.com/questions/56361809
复制相似问题