python-3.x - 无法从子包访问顶级 python 包
问题描述
我有一个如下的目录结构:
chatbot/
__init__.py
utils/
__init__.py
parser.py
nlu/
__init__.py
training/
__init__.py
module.py
我想parser.py
从module.py
. 我尝试使用以下行module.py
:
from chatbot.utils import parser
我得到了这个错误:
ModuleNotFoundError: No module named 'chatbot'
任何指向我做错了什么的指针?我正在使用python3
并尝试将脚本运行为python3 nlu/training/module.py
. 提前致谢!
解决方案
我认为解决此类问题的正确方法是:
- 弄清楚你的顶级包和模块是什么以及它们在什么目录中
- 切换到那个目录
- 使您的所有导入都成为绝对的,即始终从顶级模块或包开始(而不是像这样的东西
from . import blah
) - 使用可执行模块(
python -m
) 方式运行代码,例如path/to/pythonX.Y -m top_level_package.executable_module
(而不是path/to/pythonX.Y top_level_package/executable_module.py
)
如果顶级模块或包不在同一个目录中:
- 正确打包您的库或应用程序并将它们安装在站点包中(最终作为可编辑的,也称为开发模式)。
- 或者,作为最后的手段,收集环境变量中包含顶级包和模块的其他目录
PYTHONPATH
,如下所示:PYTHONPATH=path/to/alpha:path/to/bravo path/to/pythonX.Y -m top_level_package.executable_module
推荐阅读
- visual-studio-2019 - 有没有办法让 Premake 使用 Visual-Studio 项目模板?
- swift - 了解基于文档的应用程序中的核心数据
- node.js - 防病毒软件阻止 Electron.Net 构建
- python-3.x - 使用 Selenium 获取 Websocket 消息或使用 python 捕获 Web 套接字消息的任何方式?
- python - 如何通过比较从 python 中两个不同文本文件读取的数据来生成绘图?
- javascript - React - 找不到模块 fs 并且未定义要求
- javascript - JavaScript-在滚动时更改导航样式
- javascript - Javascript倒计时问题
- java - 错误 404:ajax 无法连接到 @requestmapping
- javascript - 如何将按钮放在我的模板的 ag 网格表的每一行的单元格上?