从另一个文件夹将函数库导入到脚本中失败(但在 Jupyter 笔记本中有效)

问题描述 投票:0回答:1

我读过很多关于导入包和模块的文章,使用绝对和相对语法,但我无法让它导入我需要的函数(我不是Python专家)。我使用 VSCode(在 Ubuntu 中),并拥有一个存储库结构,其中一个文件夹中包含 Jupyter 笔记本,另一个文件夹中包含脚本,如下所示:

data/
model_notebooks/
└── model_nb.ipynb
src/
└── myutils.py

我可以通过更改笔记本开头的当前工作目录,然后导入我需要的函数,将

myutils.py
中的函数导入到笔记本中:

import os
os.chdir('../src/')

from myutils import data_load

这也适用于导入整个

.py
库,而不仅仅是一个函数。

我现在正在尝试将这些笔记本导出到脚本中,但在导入函数时遇到问题。存储库结构发生了一些变化:

data/
src/
└── myutils.py
└── model_scripts/
    └── model.py

只有将

model.py
myutils.py
放在同一文件夹(同一级别)中,例如在
src/
中(不更改脚本中的 cwd),我才能使其工作。

据我所知,当从控制台执行脚本时,当前工作存储库不依赖于文件路径,而是依赖于我运行脚本的控制台路径,因此在执行时它不起作用

repo_root$ python src/model_scripts/model.py
与脚本中的
os.chdir('../src/')

但是如果我在

src/
内用

执行它

repo_root/src$ python model_scripts/model.py
我明白了
ModuleNotFoundError: No module named 'myutils'

我也尝试过相对导入,但没有成功。它必须在不同的系统上运行,并且应该独立于控制台中的当前路径工作。任何帮助将不胜感激。

python python-import
1个回答
0
投票
  1. 确保 src/ 和 model_scripts/ 都有该文件
    __init__.py
  2. 在 model.py 的开头添加:

导入系统

导入操作系统

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(file), '..')))

从 myutils 导入 data_load

  1. 要运行脚本,请站在外面(在 repo_root/ 中)并执行:

python src/model_scripts/model.py

© www.soinside.com 2019 - 2024. All rights reserved.