我试图从使用PyCharm配置的venv环境中运行jupyter笔记本。然而,当我试图从jupyter笔记本上运行代码时,当试图导入我知道存在的模块时,我会得到以下错误
import multipledispatch
ModuleNotFoundError: No module named 'multipledispatch'
如果我打开一个终端,激活虚拟环境并在Python中手动运行代码,它可以正常工作,没有任何问题。
当我从笔记本中检查已安装的软件包列表时,请使用
python -m pip list
模块按预期显示。如果我试图从笔记本中安装模块,请使用
!python -m pip install multipledispatch
它告诉我,需求已经满足了,但是,我仍然无法导入模块。
我能够导入其他非标准模块,这些模块是我在创建virtualenv之后安装的,因此这似乎仅限于多层调度模块。有没有人知道是什么原因造成的,或者是如何解决的?
发布于 2022-06-21 09:18:51
我弄明白这是怎么回事了。即使我将python内核设置为使用基本项目中的venv,但没有将站点包目录添加到Python路径中。
我的目录结构如下
- package2
- package2.py
- notebooks
- notebook.ipynb
- venv
- bin
- lib
我通过手动添加到项目的路径和pip (网站包*目录在笔记本的开头)来修正这个问题。我创建了一个名为project_path.py的文件,并将其放在与笔记本相同的目录中。
os.pardir
引用允许我将projectDir添加到笔记本的路径中,这可以确保我的自定义包可以从笔记本中调用。
pip_path
值给出了运行笔记本的虚拟机的站点包目录的位置。通过将这两者添加到python路径中,我可以像在根dir中一样在我的笔记本中导入包。
import sys
import os
def fix_paths():
module_path = os.path.abspath(os.pardir)
pip_path = os.path.join(module_path, "venv", "lib", "python3.9", "site-packages")
for path in [module_path, pip_path]:
if path not in sys.path:
sys.path.append(path)
在每个笔记本的开头,我添加了以下内容来运行代码并修复路径
from project_path import fix_paths
fix_paths()
https://stackoverflow.com/questions/72587197
复制相似问题