运行unittest时出现ImportError: No module named 'code.helper'求助
解决ImportError: No module named 'code.helper'的问题
嘿,我之前也踩过一模一样的坑!这个错误本质就是Python找不到你的code模块所在的目录——要么是你运行测试时的工作目录不对,要么是项目根目录没被加入Python的模块搜索路径里。下面给你几个实用的解决办法:
方法1:切换到项目根目录跑测试(最简单直接)
你现在应该是在tests目录或者其他非项目根路径下执行命令的吧?先切到myproject根目录(就是包含code、tests、docs的那个文件夹),然后再跑测试:
# 先切换到项目根目录,比如你的myproject路径是~/home/xxx/myproject cd ~/home/xxx/myproject # 执行测试命令 python3 -m unittest tests/test_helper.py
嫌每次写路径麻烦的话,还可以让unittest自动搜索测试文件:
python3 -m unittest discover tests
方法2:在测试文件里手动添加路径
如果不想每次都切换目录,可以在test_helper.py开头加几行代码,把项目根目录塞进Python的搜索路径里:
修改tests/test_helper.py成这样:
import sys import os # 拿到项目根目录的绝对路径——因为test_helper在tests文件夹,上级目录就是myproject project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, project_root) # 后面的测试代码保持不变 import unittest from code.helper import testFunction class MyTest(unittest.TestCase): def test(self): self.assertEqual(testFunction(3), 4)
这样不管你在哪个目录跑这个测试文件,Python都能找到code.helper了。
方法3:把项目装成可编辑包(适合长期开发的项目)
如果这个项目你要长期维护,推荐用这个方法,一劳永逸:
- 先在
myproject根目录下创建一个setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="myproject", version="0.1", packages=find_packages(), )
- 然后在
myproject根目录执行这条命令,把项目安装成可编辑模式:
pip install -e .
之后不管你在系统哪个位置跑测试,都能直接导入code.helper,完全不用管路径的问题。
对了,再确认下你的code文件夹里确实有__init__.py(你已经提到有这个文件了,没问题)——这个文件是Python把文件夹识别成模块包的关键,可不能删哦。
内容的提问来源于stack exchange,提问作者M. Douglas
相关产品推荐
相关产品推荐

