Python覆盖范围找不到我自己的模块

时间:2019-05-09 10:26:22

标签: python coverage.py

我的代码使用python3正确执行,但是在导入我创建的包时,使用coverage3返回ImportError。

我的项目如下:

components/common/ConfigTest/ConfigTest.py->我要执行的文件-对Config.py中声明的Config类的测试

components/common/Config.py-> ConfigTest.py中包含的文件

环境变量PYTHONPATH指向components目录的位置,因此我可以将其用作导入的基本目录。

ConfigTest.py文件开始如下:

import os
import unittest

from common.Config import Config

位于ConfigTest目录中时,运行以下命令将产生预期的输出:

python3 -m unittest ConfigTest.py

但是,运行coverage3 run ConfigTest.pycoverage3 run -m unittest ConfigTest.py会产生以下错误:

Traceback (most recent call last):
File "ConfigTest.py", line 7, in <module>
from common.Config import Config
ImportError: No module named 'common.Config'

过去,在不同的机器/不同版本的Python上执行代码时,我遇到了类似的问题,这些问题是由于PYTHONPATH环境var的设置错误引起的。在这种情况下,我在执行有问题的导入之前打印了print(os.environ['PYTHONPATH']),并且在使用python3和coverage3时,它会打印此类var的正确值。

关于可能是什么问题的任何线索? 谢谢。

1 个答案:

答案 0 :(得分:0)

我通过在源目录和测试目录中添加 init .py解决了该问题。即使目录中没有 init .py文件,似乎python3仍能够使用PYTHONPATH找到源,但是coverage3要求将目录设置为模块。

这在我当前的配置中有效,但是我不确定这是否是常规的Python和coverage行为。