python: 导入文件到另一个子目录

python: importing files to another sub directory

我有如下目录:

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

我想从 reader.py 中导入一个模块到 analyzer.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 运行.

中,我将不胜感激

您应该将 my_dir 的绝对路径加入文件 analyzer.py 开头的系统路径,它是 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

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