首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能从jupyter笔记本上进口多功能分送?

为什么我不能从jupyter笔记本上进口多功能分送?
EN

Stack Overflow用户
提问于 2022-06-11 19:10:44
回答 1查看 121关注 0票数 0

我试图从使用PyCharm配置的venv环境中运行jupyter笔记本。然而,当我试图从jupyter笔记本上运行代码时,当试图导入我知道存在的模块时,我会得到以下错误

代码语言:javascript
运行
复制
import multipledispatch
代码语言:javascript
运行
复制
ModuleNotFoundError: No module named 'multipledispatch'

如果我打开一个终端,激活虚拟环境并在Python中手动运行代码,它可以正常工作,没有任何问题。

当我从笔记本中检查已安装的软件包列表时,请使用

代码语言:javascript
运行
复制
python -m pip list

模块按预期显示。如果我试图从笔记本中安装模块,请使用

代码语言:javascript
运行
复制
!python -m pip install multipledispatch

它告诉我,需求已经满足了,但是,我仍然无法导入模块。

我能够导入其他非标准模块,这些模块是我在创建virtualenv之后安装的,因此这似乎仅限于多层调度模块。有没有人知道是什么原因造成的,或者是如何解决的?

EN

回答 1

Stack Overflow用户

发布于 2022-06-21 09:18:51

我弄明白这是怎么回事了。即使我将python内核设置为使用基本项目中的venv,但没有将站点包目录添加到Python路径中。

我的目录结构如下

  • main.py
  • package1
    • package1.py

  • projectDir projectDir

代码语言:javascript
运行
复制
- package2 
    - package2.py
代码语言:javascript
运行
复制
- notebooks 
    - notebook.ipynb
代码语言:javascript
运行
复制
- venv 
    - bin
    - lib

我通过手动添加到项目的路径和pip (网站包*目录在笔记本的开头)来修正这个问题。我创建了一个名为project_path.py的文件,并将其放在与笔记本相同的目录中。

os.pardir引用允许我将projectDir添加到笔记本的路径中,这可以确保我的自定义包可以从笔记本中调用。

pip_path值给出了运行笔记本的虚拟机的站点包目录的位置。通过将这两者添加到python路径中,我可以像在根dir中一样在我的笔记本中导入包。

代码语言:javascript
运行
复制
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)

在每个笔记本的开头,我添加了以下内容来运行代码并修复路径

代码语言:javascript
运行
复制
from project_path import fix_paths

fix_paths()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72587197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档