
下面的错误看起来是不似乎非常熟悉,这个经常出现在我们的代码报错中:
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教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14232/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料