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



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

文件夹结构如下:

1.FirstFolder/
notebookA.ipynb
2.SecondFolder/
notebookB.ipynb
mylib/
__init__.py
otherfiles.py

我试着把以下代码放在笔记本的开头:

# 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:nt{libpath}")
sys.path.append(libpath)
import mylib

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

---> 10 import mylib
11 from mylib import *
ModuleNotFoundError: No module named 'mylib'

查阅SO,我发现这应该是从非默认文件夹导入模块的方式错误在哪里

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

第2版:我试过了,它奏效了,但我仍然想知道为什么以前的方法没有奏效。

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)

您已将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

这样做可以导入位于其他文件.py中的变量X = 'import success',如下所示:

ans = mylib.otherfiles.X
print(ans)
>>> 'import success'

我认为Jupiter无法找到您模块的文件夹。

第一个使用的细胞

cd ..

然后在下一个小区-然后它应该工作

import mylib 

最新更新