gpt4 book ai didi

python - 调试 Python 导入失败 (ModuleNotFoundError)

转载 作者:行者123 更新时间:2023-12-05 05:06:36 24 4
gpt4 key购买 nike

短:

我一直在尝试调试发生在我的本地仓库克隆之一中的 ModuleNotFoundError

更多细节:

我有同一个仓库的两个克隆。目前两者都已 checkout 主分支。我想运行一个 Python 脚本,它导入各种模块,导入其他模块等。在第一个 repo 克隆中,我得到 ModuleNotFoundError: No module named 'TheModuleInQuestion'。在第二个克隆中,脚本成功导入了它需要的所有内容并且运行没有错误 - 尽管 sys.path 不包含特定于 repo 的文件夹名称,尽管所有可能被导入的文件也存在于第一个 repo 中。

我想通过观察导入过程、搜索文件夹的顺序以及第二个 repo 中导入模块的路径来调试它,最好使用 pdb。我在线查看了 pdb 用户指南,但没有发现与此特定用例相关的内容。我该怎么做呢?

更多信息

我所有的 repo 克隆都在 ~/git 的子文件夹中(或者,因为我在 Windows 10 上使用 Git Bash,C:\users\myusername\git)

我使用的是 Python 3.6.5 32 位。这不是最新版本,它是公司出于与某些包或其他包的兼容性原因指定的版本。

>>> import sys
>>> sys.path
['', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'c:\\users\\myusername\\downloads\\pyopenssl-master\\src']

得到之后

ModuleNotFoundError: No module named 'TheModuleInQuestion'

我已经在我的存储库克隆中搜索名称以“TheModuleInQuestion”开头的文件。其中任何一个都没有“The ModuleInQuestion.py”。各种文件夹包含:

  • TheModuleInQuestion.dll
  • TheModuleInQuestion.pdb(可能是 Microsoft 的“程序数据库”格式。我可能会将它添加到其他 pdb 的标签中。)
  • TheModuleInQuestion.xml
  • TheModuleInQuestion.dll.config
  • TheModuleInQuestion.dll-Help.xml

最佳答案

Python 模块可以是纯 Python(.py 文件)或二进制 lib 文件(Linux 上的 .so,Windows 上的 .dll),因此您要查找的模块很可能是“TheModuleInQuestion.dll”。

wrt/“使用 pdb 调试导入过程”,恐怕你不能在这里做很多事情——pdb 只能在纯 python 代码上工作,所有导入系统都是内置的(python.h 的一部分)。 exe 运行时)。

尽管如此,您仍然可以回答两个问题:

the order in which folders are searched

那是 sys.path,非常简单。这正是它定义的:搜索文件夹的顺序。 FWIW,它包含“没有特定于 repo 的文件夹名称”这一事实是正常的并且是预期的。

and the path of the imported module in the second repo

转到你的第二个 repo 文件夹,打开一个 python shell 并键入

>>> import TheModuleInQuestion
>>> print(TheModuleInQuestion)

现在,如果两个本地存储库都是同一个远程仓库的克隆并且在同一个分支上(它们在同一个版本中吗?),它们之间应该没有太大区别。我不知道 Windows 上有哪些差异工具可用,但我在这里要做的第一件事就是对存储库进行差异分析。

如果没有什么明显的结果,我会检查文件和文件夹权限(当然特别是这个“TheModuleInQuestion.xxx”文件,但也会检查通向它的整个路径)。

最后 - 如果没有其他办法解决问题 - 我会制作第三个克隆存储库并对其进行测试(最终测试不同的修订版)。

哦,是的:清理陈旧的 .pyc 文件通常是个好主意。我认为它不会解决您的任何问题(如果 TheModuleInQuestion 是一个 dll...),但这仍然是个好主意 - 有时删除的 .py 文件会留下陈旧的 .pyc,并且那么所有的赌注都取消了;-)

关于python - 调试 Python 导入失败 (ModuleNotFoundError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59749670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com