无法从 Jupyter-lab 笔记本和 pathlib.Path 导入位于父文件夹中的模块

Ger*_*nno 7 python python-import python-3.x jupyter-notebook

这是我的情况。我在某个文件夹中有一些 jupyter 笔记本,我想通过我制作的库在这些笔记本之间共享一些代码。

文件夹结构如下:

1.FirstFolder/
    notebookA.ipynb
2.SecondFolder/
    notebookB.ipynb
mylib/
    __init__.py
    otherfiles.py
Run Code Online (Sandbox Code Playgroud)

我尝试将以下代码放在笔记本的开头:

# to use modules in parent folder
import sys
import os
from pathlib import Path
libpath = os.path.join(Path.cwd().parent,'mylib')
print(f"custom library functions are in the module:\n\t{libpath}")
sys.path.append(libpath)
import mylib
Run Code Online (Sandbox Code Playgroud)

打印输出模块的正确路径,然后出现 ModuleNotFoundError 并导致程序崩溃:

---> 10 import mylib
     11 from mylib import *

ModuleNotFoundError: No module named 'mylib'
Run Code Online (Sandbox Code Playgroud)

查找 SO 我发现这应该是从非默认文件夹导入模块的方法。错误在哪里?

编辑:在 FinleyGibson 的回答之后,我尝试sys.path.append(Path.cwd().parent)重新启动内核,但仍然遇到同样的问题。

EDIT2:我尝试了这个并且它有效,但我仍然想知道为什么以前的方法不起作用。

import sys
import os
from pathlib import Path
tmp = Path.cwd()
os.chdir(Path.cwd().parent)
sys.path.append(Path.cwd())
import mylib
from mylib.dataloading import *
os.chdir(tmp)
Run Code Online (Sandbox Code Playgroud)

Fin*_*son 5

您已将的内容os.path.join(Path.cwd().parent,'mylib')添加到您的路径中,这意味着 python 将该目录中查找您正在导入的模块。mylib不位于此目录中,而是位于父目录中。还Path.cwd().parent返回一个pathlib.PosixPath对象。将其转换为字符串以将其与导入一起使用(或者,只需使用sys.path.append('../')

尝试:

import sys
import os
from pathlib import Path
sys.path.append(str(Path.cwd().parent))
import mylib
Run Code Online (Sandbox Code Playgroud)

这样做允许我导入X = 'import success'位于 otherfiles.py 中的变量,如下所示:

ans = mylib.otherfiles.X
print(ans)

>>> 'import success'
Run Code Online (Sandbox Code Playgroud)