我有以下包(和工作目录):
WorkingDirectory--
|--MyPackage--
| |--__init__.py
| |--module1.py
| |--module2.py
|
|--notebook.ipynb
在 __init__.py
我有:
import module1
import module2
如果我尝试将 MyPackage 导入我的笔记本:
import MyPackage as mp
我会得到 ModuleNotFoundError: No module named 'module1'
。但如果我在笔记本外执行脚本,导入工作正常:如果我在同一目录中创建 test.py
并执行与在笔记本中相同的操作,导入将正常工作。如果我在 __init__.py
( import MyPackage.module1
) 中使用完全限定名称,它将在笔记本中工作。
不同导入行为的原因是什么?
我已经确认笔记本的工作目录是 WorkingDirectory
。
- -更新 - - - - -
确切的错误是:
C:\Users\Me\Documents\Working Directory\MyPackage__init__.py in <module>()
---> 17 import module1
ModuleNotFoundError: No module named 'module1'
我的问题与可能的重复问题不同:
笔记本能够找到包,但只能加载模块。这是通过将
module1
替换为MyPackage.module1
推断出来的,效果很好,表明它可能不是与PATH
相关的问题我进入了
WorkingDirectory
并在那里启动了服务器。工作目录应该是包含我的包的文件夹。
原文由 Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我很确定这个问题是相关的,那里的答案会帮助你: https ://stackoverflow.com/a/15622021/7458681
tl; dr 笔记本服务器的 cwd 始终是您启动服务器的基本路径,无论正在运行
import os os.getcwd()
说。使用import sys sys.path.append("/path/to/your/module/folder")
。我用一些与你指定的结构相同的虚拟模块运行它,在修改之前
sys.path
它不会运行,之后它会