当前位置:首页>python>彻底解决Python3: No module named 问题

彻底解决Python3: No module named 问题

  • 2026-10-11 07:18:48
彻底解决Python3: No module named 问题
关注+星标,每天学习Python新技能

来源:网络

下面的错误看起来是不似乎非常熟悉,这个经常出现在我们的代码报错中:

python3: No module named [模块名称]

这可能是因为你没有安装正确的依赖项,当 定义的依赖项集与正在运行的应用程序代码不匹配时,通常会发生这种情况。

相反,有时可能安装了太多软件包,从而使你的软件包大小变大,减慢了部署速度,并花费了您更多的时间和金钱,这通常在拆分服务、删除死代码或迁移到新软件包时发生。

在这两种情况下,我们都需要检查我们的代码并确保已安装的依赖项集 == 已使用的依赖项,在最好的情况下,我们还可以强制这种状态永久存在。

发现

假设已定义已安装的依赖项,我们如何找出我们使用的依赖项?有一个内置命令可以显示给定 Python 模块的外部依赖项,让我们对存储库本身进行 dogfood 测试,以确保我们的依赖项集正确!

首先 - 安装 tach:

\> pip install tach

接下来,让我们进行设置,以便它可以理解我们的项目,我们可以通过以下方式将我们的 Python 源根指示为:

\> tach mod

这种情况下,我们的源根位于存储库的根目录中,这会将项目的配置写入 。

接下来,让我们运行内置命令来显示 Rich 中的依赖项,所有 Python 代码都在 :

> tach report-external --raw python/tachpydanticpyyamlgitpythonrichprompt-toolkittomli-wnetworkxstdlib-listimportlib-metadata

请注意,我们过去只以 PEP 508 格式打印每个依赖项一次,如果未设置此标志,将输出第三方依赖项的每次使用。

在这里,我们可以看到 tach 使用了 9 个外部依赖项 - 我们可以通过检查以下内容来验证这一事实:pyproject.toml

dependencies = [  "pyyaml~=6.0", # pyyaml  "tomli-w~=1.0", # tomli-w  "pydantic~=2.0", # pydantic  "rich~=13.0", # rich  "prompt-toolkit~=3.0", # prompt-toolkit  "GitPython~=3.1", # gitpython  "networkx~=3.0; python_version > '3.7'", # networkx  "networkx>=2.6,<4.0; python_version == '3.7'",  "pydot~=2.0", # ???  "stdlib-list>=0.10.0; python_version < '3.10'", # stdlib-list  "importlib_metadata>=6.5; python_version == '3.7'", # importlib-metadata]

有趣的是 - 在这里,我们看到大多数依赖项都被覆盖了,但没有告知!这是怎么回事?

如果我们检查代码,我们会看到:

# tach/show.pyif TYPE_CHECKING:  ...  import pydot

因为 位于 类型检查块中,所以它不是会阻止执行的依赖项, 默认情况下,忽略这些类型的导入,如果我们想要显示它,我们可以在配置中翻转标志:pydot``tach``ignore_type_checking``tach.toml

# tach.toml...ignore_type_checking_imports = false

现在,如果我们运行 ,我们会看到 !tach report-external --raw python/tach``pydot

> tach tach report-external --raw python/tachgitpythonnetworkxpydanticpyyamlprompt-toolkitstdlib-listrichpydottomli-wimportlib-metadata

太棒了 - 我们使用的依赖项与我们声明的依赖项相匹配!

执行

通常,当有人删除必需的依赖项时,现有工具链中的某个地方将出现故障,但是,通常很难识别依赖项周围的其他膨胀 - 这就是需要 tach check-external 的地方

check-external 验证您定义的代码是否仅导入并使用您列出的第三方依赖项。这甚至适用于多个源根!我们可以在 CI 中使用此命令来验证我们是否与第三方依赖项完全匹配:

> tach check-external✅ All external dependencies validated!

这确保我们永远不会缺少我们需要的安装依赖!

原文:https://www.gauge.sh/blog/find-your-third-party-dependencies-in-python

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

▲扫描二维码-免费领取

推荐阅读

再用 `print` 进行 Python调试,你就OUT啦!

99% 的 Python 新手都分不清的两件事

使用 PyScript 将 Jupyter Notebook 转换为交互式仪表盘

从 Flask 切到 FastAPI 后,起飞了!

点击 阅读原文了解更多

最新文章

随机文章