调试Python导入失败(ModuleNotFoundError)

2024-09-30 22:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

Short:

我一直在尝试调试一个发生在我的一个本地repo克隆中的ModuleNotFoundError

更多详细信息:

我有两个相同回购协议的克隆。目前,两家公司都已将主分支机构签出。我想运行一个Python脚本,它导入各种模块,导入其他模块,等等。在第一个repo克隆中,我得到ModuleNotFoundError: No module named 'TheModuleInQuestion'。在第二个克隆中,脚本成功导入了它所需的所有内容,并且运行时没有错误—尽管sys.path不包含任何特定于repo的文件夹名,并且尽管可能要导入的所有文件也存在于第一个repo中

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

更多信息

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

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

>>> 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'

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

  • moduleinquestion.dll
  • moduleinquestion.pdb(可能是Microsoft的“程序数据库”格式。我可以将其与其他pdb一起添加到标记中。)
  • moduleinquestion.xml
  • moduleinquestion.dll.config
  • moduleinquestion.dll-Help.xml

Tags: 模块nogit脚本文件夹sys公司repo
1条回答
网友
1楼 · 发布于 2024-09-30 22:23:20

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

wrt/“用pdb调试导入过程”,恐怕您在这里做不了什么-pdb只在纯python代码上工作,而且所有导入系统都是内置的(python.exe运行时的一部分)

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

the order in which folders are searched

这很简单。这正是它定义的:搜索文件夹的顺序。FWIW,它包含“没有特定于回购协议的文件夹名”这一事实是正常的,也是意料之中的

and the path of the imported module in the second repo

转到第二个repo文件夹,打开pythonshell并键入

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

现在,如果两个本地回购协议都是同一远程协议的克隆,并且位于同一分支上(它们是否处于同一版本?),那么它们之间应该没有太大差异。我不知道Windows上有什么不同的工具,但我在这里要做的第一件事是不同的回购协议

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

最后,如果没有其他办法解决这个问题,我会制作第三个克隆repo并对其进行测试(最终测试不同的版本)

哦,是的:清理陈旧的.pyc文件通常是个好主意。我认为在您的情况下,它不会解决任何问题(如果所讨论的模块是一个dll…),但这仍然是一个好主意-有时删除的.py文件会留下一个过时的.pyc,然后所有的赌注都被取消;-)

相关问题 更多 >