编程学习网 > 编程语言 > Python > 彻底解决Python3: No module named 问题!
2026
06-15

彻底解决Python3: No module named 问题!


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

python3: No module named [模块名称]

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

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

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

发现

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

首先 - 安装 tach

\> pip install tach

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

\> tach mod

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

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

> tach report-external --raw python/tach
pydantic
pyyaml
gitpython
rich
prompt-toolkit
tomli-w
networkx
stdlib-list
importlib-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.py
if 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/tach
gitpython
networkx
pydantic
pyyaml
prompt-toolkit
stdlib-list
rich
pydot
tomli-w
importlib-metadata

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

执行

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

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

> tach check-external

✅ All external dependencies validated!

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

以上就是“彻底解决Python3: No module named 问题!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。  

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取