【问题标题】:python: importing files to another sub directorypython:将文件导入另一个子目录
【发布时间】:2021-09-23 08:12:16
【问题描述】:

我有一个如下目录:

my_dir
  |__data_reader
  |    |__reader.py
  |    |__ __init__.py
  |         
  |__folder1
  |    |__folder2
  |           |__ analyzer.py
  |           |__ __init__.py

我想在analyzer.py 中从reader.py 导入一个模块。我试过了:

from data_reader.reader import my_module

得到了这个错误:

ModuleNotFoundError: 没有名为“data_reader”的模块

注意:我不能使用:from my_dir.data_reader.reader import my_module,而名称 my_Dir 可能会改变,我想以一种干净的方式来解决这些问题。

试过了:

from ..data_reader.reader import my_module

from ...data_reader.reader import my_module

并得到以下错误:

ImportError:尝试在没有已知父包的情况下进行相对导入,尽管我在两个目录中都有 init.py。

我也尝试使用以下方法加入目录:

REPO_ROOT_DIRECTORY = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
DATA_READER_DIRECTORY = os.path.join(REPO_ROOT_DIRECTORY, "data_reader")

但仍无法识别导入 DATA_READER_DIRECTORY

更新

我意识到一些有趣的事情,当我尝试在 pycharm 中运行这段代码时,第一个代码运行良好,所有相关导入也很好。但是,当我在 pycharm 终端或我的终端中尝试它时,它会发送错误。如果有人能解释为什么这些错误发生在终端而不是 pycharm 运行中,我将不胜感激。

【问题讨论】:

标签: python import directory python-import


【解决方案1】:

你应该在文件analyzer.py的开头加入my_dir的绝对路径,它是data_reader的父系统路径 这是一个例子。

# analyzer.py
import sys
from pathlib import Path
parent_of_data_reader = str(Path('../../').absolute())
sys.path.insert(0, parent_of_data_reader)
# import hello from module data_reader
from data_reader import hello

注意: hello 是在my_dir/data_reader/__init__.py 中声明的变量。如果你想从my_dir/data_reader/reader.py 导入东西,试试

# analyzer.py
import sys
from pathlib import Path
parent_of_data_reader = str(Path('../../').absolute())
sys.path.insert(0, parent_of_data_reader)
# import hello from module data_reader.reader
# hello is a variable declared in reader.py
from data_reader.reader import hello

然后你就可以正确导入你的模块了。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2017-09-12
    • 2023-03-20
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2017-05-04
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多