You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python标准项目结构下模块导入及单元测试失败求助

我完全懂你这种折腾半天导入还搞不定的崩溃感!咱们一步步把这个问题拆解开,先把项目结构理清楚,再逐个解决导入的问题。

首先先明确你的正确项目结构(结合你描述的内容补全):

Project/
├── LICENSE.txt
├── README.txt
├── code/
│   ├── __init__.py
│   ├── bidon.py
│   └── main.py
└── tests/
    ├── context.py
    └── test_bidon.py

第一步:修复context.py的导入逻辑

你之前的导入失败,核心原因是Python默认不会把项目根目录加入模块搜索路径——tests和code是同级目录,直接在context.py里导入code会找不到这个包。我们需要手动把项目根目录加入搜索路径,再导入code。

替换context.py的内容为:

import sys
import os

# 获取项目根目录(tests目录的上级目录)
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

# 现在就能正常导入code包了
import code

这段代码的作用是把Project目录(也就是tests的父目录)添加到Python的模块搜索路径里,这样Python就能识别到code这个包。

第二步:修复test_bidon.py的问题

你之前的测试代码有几个明显的问题:拼写错误、函数引用错误、相对导入的坑,我们一一修正:

替换test_bidon.py的内容为:

import unittest
from context import code  # 通过context.py导入code包

class TestBidon(unittest.TestCase):
    def test_add(self):
        # 正确引用bidon里的add函数
        result = code.bidon.add(10, 5)
        self.assertEqual(result, 15)

if __name__ == "__main__":  # 注意这里之前拼写错了,是__main__不是__main___
    unittest.main()

额外的优化与注意事项

  1. 推荐的测试运行方式:从项目根目录(Project/)运行测试,用命令:

    python -m tests.test_bidon
    

    这种方式会自动把项目根目录加入模块路径,即使不依赖context.py也能正常运行(当然保留context.py对团队协作更友好)。

  2. 检查拼写错误:你之前的导入语句里出现过from code import bidion(应该是bidon),这种低级拼写错误也会导致导入失败,一定要仔细核对。

  3. 确保__init__.py存在:code目录下的__init__.py是Python识别该目录为包的标志,你的结构里已经有了,这点没问题。

  4. 避免命名冲突:不要在项目根目录创建和模块同名的文件(比如code.py或bidon.py),否则会覆盖你要导入的包。

按照上面的步骤调整后,你的导入和单元测试应该就能正常运行了!

内容的提问来源于stack exchange,提问作者user8584384

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:29:55