以下是我的情况。我有一些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:\n\t{libpath}")
sys.path.append(libpath)
import mylib
print函数输出了模块的正确路径,然后会出现ModuleNotFoundError导致程序崩溃:
---> 10 import mylib
11 from mylib import *
ModuleNotFoundError: No module named 'mylib'
在Stack Overflow上查找,我发现那应该是从非默认文件夹导入模块的方式。哪里出错了?
编辑:按照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)
from mylib import otherfiles
或者from mylib.otherfiles import *
。这两个方法都可以吗?如果不行,等我精神状态好一些再看看它。 - FinleyGibsonPath.cwd().parent
返回一个pathlib.PosixPath对象,无法被导入解释。将其转换为字符串后,问题得到了解决。我已经更新了我的答案,并提供了可行的代码供你尝试。 - FinleyGibson