在我的工作区中,目录结构如下:
F:
`-- src
|-- lib
| `-- base.py
`-- tests
`-- test_modulexx
`-- test_module_001.py
在文件test_module_001.py
中,我导入了lib
模块。
test_module_001.py:
import os
from lib.base import BaseTestCase
有时我在文件夹F:\ src中运行它。它会引发错误:
File "F:\src\tests\test_modulexx\test_module_001.py", line 2, in <module>
from lib.base import BaseTestCase
ModuleNotFoundError: No module named 'lib'
如果您遇到相同的错误并且已经解决,可以与我分享吗? 而且,我想知道为什么它不起作用。让我们彻底解决问题。
答案 0 :(得分:0)
我尝试调试它,发现可能有帮助。
当我启动python console时。并导入模块lib
,它可以正常工作。然后我检查sys.path,结果是这样的。
>> import lib
>> import sys
>> sys.path
['', 'C:\\Python\\Anaconda3\\python37.zip', 'C:\\Python\\Anaconda3\\DLLs', 'C:\\Python\\Anaconda3\\lib', 'C:\\Python\\Anaconda3', 'C:\\Python\\Anaconda3\\lib\\site-packages', '', 'C:\\Python\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Python\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Python\\Anaconda3\\lib\\site-packages\\Pythonwin']
列表中的第一个元素是''
。然后在导入模块lib
之前在python文件中设置断点。
文件test_module_001.py:
import pdb;pdb.set_trace()
import lib
然后我在Windows控制台中执行python tests \ test_modulexx \ test_module_001.py并打印sys.path
>f:\src\tests\test_modulexx\test_module_001.py(2)<module>()
->import lib
(Pdb)import sys
(Pdb)sys.path
['F:\\src\\tests\\test_modulexx', 'C:\\Python\\Anaconda3\\python37.zip', 'C:\\Python\\Anaconda3\\DLLs', 'C:\\Python\\Anaconda3\\lib', 'C:\\Python\\Anaconda3', 'C:\\Python\\Anaconda3\\lib\\site-packages', 'C:\\Python\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Python\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Python\\Anaconda3\\lib\\site-packages\\Pythonwin']
(Pdb)import lib
*** ModuleNotFoundError: No module named 'lib'
sys.path
中的第一个元素已更改。现在是F:\\src\\tests\\test_modulexx
。我将''
添加到sys.path
和import lib
中。可以。
(Pdb)sys.path.append('')
(Pdb)import lib
(Pdb)
我认为原因是Python导入模块的范围是在sys.path中定义的。 ''
表示当前路径。
答案 1 :(得分:-1)
检查是否已为模块添加了必需的__init__.py
文件。
参见:Working with Modules in Python