Python无法导入自定义模块

时间:2020-08-19 08:28:31

标签: python

在我的工作区中,目录结构如下:

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'

如果您遇到相同的错误并且已经解决,可以与我分享吗? 而且,我想知道为什么它不起作用。让我们彻底解决问题。

2 个答案:

答案 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.pathimport lib中。可以。

(Pdb)sys.path.append('')
(Pdb)import lib
(Pdb)

我认为原因是Python导入模块的范围是在sys.path中定义的。 ''表示当前路径。

答案 1 :(得分:-1)

检查是否已为模块添加了必需的__init__.py文件。 参见:Working with Modules in Python