从与项目结构相同级别的另一个文件夹中的文件导入

时间:2019-05-30 17:33:14

标签: python-3.x

我一直在寻找如何做到这一点的方法,但没有成功。想象一下我有一个这样的项目结构:

my_proj
- notebooks
- - a_notebook_into_which_i_want_to_import_a_class.ipynb
- src
- - a_file_with_the_class_i_want_to_import.py

我将如何编写导入语句?

我正在使用python 3.7,但也对其他python版本(如果它们不同)的正确过程感兴趣。

1 个答案:

答案 0 :(得分:0)

从本质上讲,您需要通知Python在何处查找要导入的类。您可以通过在脚本中打印sys.path来检查默认位置列表。通常,这是几个标准位置,包括python安装目录本身。它还将检入当前正在运行的脚本所在的目录。

由于您不能将其他文件移动到同一目录中,因此可以将其添加到PYTHONPATH环境变量中(这使其可以被计算机上的所有脚本访问)或按顺序使用以下代码段只为您的特定脚本加载它。

该代码段仅在脚本执行期间添加路径,并且不会进行任何持久更改。

import os
import sys
from pathlib import Path

# to get the path of currently running script
path = Path(os.path.realpath(__file__))
# path.parents[0] gets the immediate parent dir (notebooks/)
# path.parents[1] is 2 levels up, i.e. my_proj/
# use path.join to get abspath of src/, and then add it to sys.path
sys.path.append(os.path.join(path.parents[1], 'src'))

from a_file_with_the_class_i_want_to_import import DesiredClass

# You should be able to use it now