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
然后您就可以正确导入您的模块了。
我有如下目录:
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
然后您就可以正确导入您的模块了。