You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VSCode中运行Python unittest提示“No module named 'foo'”问题求助

VSCode中运行Python unittest提示“No module named 'foo'”问题求助

兄弟,我之前在VSCode里跑unittest的时候也踩过一模一样的坑!看你的描述,大概率是Python模块搜索路径的问题——VSCode默认运行测试的工作目录可能不是你的项目根目录,导致找不到上层的foo模块。结合你的场景,给你几个亲测有效的解决办法:

先确认你的目录结构(我猜应该是这样的?)

先确认下你的项目目录是不是类似这种结构,要是不对你可以补充下:

你的项目根目录/
├── foo.py          # 你要导入的目标模块
├── tests/
│   └── test_foo.py # 你的测试文件
└── .venv/          # 你的虚拟环境

方法1:临时给测试文件添加路径(最快见效)

直接在test_foo.py的最开头加上几行代码,把项目根目录手动加入Python的搜索路径:

import sys
import os
# 把当前测试文件所在目录的上级目录(也就是项目根目录)加入搜索路径
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

# 后面的测试代码保持不变
import unittest
import foo

class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual(foo.f(), 'FOO3')

if __name__ == '__main__':
    unittest.main()

这样修改后,运行测试应该就能直接找到foo模块了,适合快速验证问题。

方法2:配置VSCode的测试工作目录(一劳永逸)

如果不想改代码,可以直接配置VSCode,让它运行测试时以项目根目录作为工作目录:

  1. 打开VSCode的设置(快捷键Ctrl+,
  2. 在搜索框输入Python > Testing: Cwd
  3. 把这个选项的值设置为${workspaceFolder}(也就是你的项目根目录)
  4. 保存设置后,重新运行测试试试

这个方法的好处是不用改任何代码,所有测试文件都能受益。

方法3:把项目设为可编辑安装(适合规范项目)

如果你的项目需要长期维护,或者以后要打包发布,可以在项目根目录创建一个pyproject.toml文件,内容如下:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "随便起个项目名比如foo-demo"
version = "0.1.0"

然后激活你的虚拟环境,在项目根目录运行:

pip install -e .

这个命令会把你的项目以“可编辑模式”安装到虚拟环境里,以后不管你在哪个目录运行代码,都能直接import foo,完全不用管路径问题。


最后再检查两个细节

  1. 确认VSCode左下角显示的Python解释器是你的.venv里的那个,要是不对的话点击它切换到虚拟环境的Python
  2. 确保你激活了虚拟环境再运行测试(虽然VSCode设了interpreter的话一般会自动用,但保险起见可以在终端里先执行source .venv/bin/activate(Linux/Mac)或者.venv\Scripts\activate(Windows))

你可以先试试方法1,要是解决了再考虑方法2或者3,有问题随时补充你的目录结构或者其他细节哈!

火山引擎 最新活动