无法从 Jupyter-lab 笔记本和 pathlib.Path 导入位于父文件夹中的模块
Can't import module situated in parent folder from Jupyter-lab notebook and pathlib.Path
这是我的情况。我在某个文件夹中有一些 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
打印输出正确的模块路径,然后出现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)
我认为 Jupiter 无法找到您模块的文件夹。
第一次使用电池
cd ..
然后在下一个单元格中 - 然后它应该工作
import mylib
您已将 os.path.join(Path.cwd().parent,'mylib')
的 内容 添加到您的路径中,这意味着 python 将在 内部查找 您正在导入的模块的此目录。 mylib
不在这个目录中,而是在父目录中。还有 Path.cwd().parent
returns 一个 pathlib.PosixPath
对象。将其转换为字符串以将其与导入一起使用(或者,仅使用 sys.path.append('../')
:
尝试:
import sys
import os
from pathlib import Path
sys.path.append(str(Path.cwd().parent))
import mylib
这样做可以让我导入位于 otherfiles.py 的变量 X = 'import success'
,如下所示:
ans = mylib.otherfiles.X
print(ans)
>>> 'import success'
这是我的情况。我在某个文件夹中有一些 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
打印输出正确的模块路径,然后出现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)
我认为 Jupiter 无法找到您模块的文件夹。
第一次使用电池
cd ..
然后在下一个单元格中 - 然后它应该工作
import mylib
您已将 os.path.join(Path.cwd().parent,'mylib')
的 内容 添加到您的路径中,这意味着 python 将在 内部查找 您正在导入的模块的此目录。 mylib
不在这个目录中,而是在父目录中。还有 Path.cwd().parent
returns 一个 pathlib.PosixPath
对象。将其转换为字符串以将其与导入一起使用(或者,仅使用 sys.path.append('../')
:
尝试:
import sys
import os
from pathlib import Path
sys.path.append(str(Path.cwd().parent))
import mylib
这样做可以让我导入位于 otherfiles.py 的变量 X = 'import success'
,如下所示:
ans = mylib.otherfiles.X
print(ans)
>>> 'import success'