Python 在Jupyter笔记本中导入期间未找到模块

Python 在Jupyter笔记本中导入期间未找到模块,python,python-3.x,jupyter-notebook,python-import,python-module,Python,Python 3.x,Jupyter Notebook,Python Import,Python Module,我有以下软件包(和工作目录): 在\uuuu init\uuuuu.py中,我有: import module1 import module2 如果我尝试将我的软件包导入笔记本: import MyPackage as mp 我将获得ModuleNotFoundError:没有名为'module1'的模块。但是,如果我在笔记本之外执行脚本,导入可以正常工作:如果我在同一个目录中创建test.py,并执行与笔记本中相同的操作,导入将正常工作。如果我在\uuu init\uuuu.py中使用完

我有以下软件包(和工作目录):

\uuuu init\uuuuu.py
中,我有:

import module1
import module2
如果我尝试将我的软件包导入笔记本:

import MyPackage as mp 
我将获得
ModuleNotFoundError:没有名为'module1'的模块
。但是,如果我在笔记本之外执行脚本,导入可以正常工作:如果我在同一个目录中创建
test.py
,并执行与笔记本中相同的操作,导入将正常工作。如果我在
\uuu init\uuuu.py
中使用完全限定名(
导入MyPackage.module1
),它将在笔记本中工作

不同导入行为的原因是什么

我已确认笔记本的工作目录为
WorkingDirectory

---更新---------

确切的错误是:

C:\Users\Me\Documents\Working Directory\MyPackage\__init__.py in <module>()
---> 17 import module1

ModuleNotFoundError: No module named 'module1'
C:\Users\Me\Documents\Working Directory\MyPackage\\uuuu init\uuuuuu.py in()
--->17导入模块1
ModuleNotFoundError:没有名为“module1”的模块
我的问题与可能的重复问题不同:

  • 笔记本可以找到软件包,但无法加载模块。这是从用
    MyPackage替换
    module1
    推断出来的。module1
    运行良好,表明这可能不是与
    路径相关的问题

  • 我进入
    WorkingDirectory
    并在那里启动了服务器。工作目录应该是包含我的包的文件夹


  • 我很确定这个问题是相关的,答案将帮助您:

    tl;dr笔记本服务器的cwd始终是启动服务器的基本路径,无论运行的是
    import os os。getcwd()
    。使用导入sys.path.append(“/path/to/your/module/folder”)


    我使用与您指定的相同结构的一些虚拟模块运行它,在修改
    sys.path
    之前,它不会运行,之后它会运行,原因是您的
    MyPackage/\uu init\uuuuuuuuupy
    是从当前工作目录运行的。例如,在这种情况下,从
    工作目录
    。这意味着解释器找不到名为
    module1
    的模块,因为它不在当前或全局包目录中

    这方面几乎没有解决办法。例如,您可以像这样临时覆盖当前工作目录

    cwd = os.getcwd()
    csd = __path__[0]
    os.chdir(csd)
    
    然后,在完成所有包初始化操作(如
    import module1
    )后,使用
    os.chdir(cwd)
    恢复“调用者”的工作目录

    对于我来说,这是一种非常糟糕的方法,因为,例如,如果在初始化操作中引发异常,则无法恢复工作目录。您需要使用
    try..except
    语句来修复此问题

    另一种方法是使用相对进口。有关更多详细信息,请参阅

    下面是一个适用于您的示例的
    MyPackage/\uuuuu init\uuuuu.py

    from .module1 import *
    
    但它也有一些不足之处,而这些不足之处是通过文献中的经验发现的。例如,您不能编写类似于
    import.module1
    的内容


    Upd:
    我发现,即使从常用的python控制台运行
    importmypackage
    ,也会引发此异常。不是来自Ipyton或Jupyter笔记本的。所以这似乎不是IPython本身的问题。

    两行代码可以解决这个问题

    #list the current work dir
    os.getcwd()
    #change the current work dir
    os.chdir()
    

    更改路径,导入模块,玩得开心。

    可能重复的@LouiseDavies我更新了我的问题以解决重复的问题。我遇到过类似的问题,它连接到一些旧内核,但没有所有的包;确保您一次有一个,并且它连接到默认端口8888。您是要将
    WorkingDirecotry
    添加到
    PATH
    还是
    WorkingDirectory/MyPackage
    ?后者有效,但前者无效。这是预期的行为吗?如果
    路径
    是问题所在,为什么在init.py中使用完全限定名可以解决问题?
    #list the current work dir
    os.getcwd()
    #change the current work dir
    os.chdir()