Python 覆盖率未找到我自己的模块
Python coverage not finding my own modules
我的代码使用 python3 正确执行,但使用 coverage3 returns 在导入我创建的包时出现 ImportError。
我的项目如下所示:
components/common/ConfigTest/ConfigTest.py
-> 我要执行的文件 - 对 Config.py
中声明的配置 class 的测试
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.py
或 coverage3 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 的不同 machines/different 版本上执行我的代码时遇到过类似的问题,这些问题是由于 PYTHONPATH 环境变量设置错误引起的。在这种情况下,我在执行有问题的导入之前打印了 print(os.environ['PYTHONPATH'])
,并且在使用 python3 和 coverage3 时打印了此类 var 的正确值。
关于问题可能是什么的任何线索?
谢谢。
我通过在源目录和测试目录中添加 __init__.py
解决了这个问题。即使目录没有 __init__.py
文件,python3 似乎也可以使用 PYTHONPATH 找到源,但 coverage3 要求将目录设置为模块。
这适用于我当前的配置,但我不确定它是否是一般 Python 和覆盖行为。
我的代码使用 python3 正确执行,但使用 coverage3 returns 在导入我创建的包时出现 ImportError。
我的项目如下所示:
components/common/ConfigTest/ConfigTest.py
-> 我要执行的文件 - 对 Config.py
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.py
或 coverage3 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 的不同 machines/different 版本上执行我的代码时遇到过类似的问题,这些问题是由于 PYTHONPATH 环境变量设置错误引起的。在这种情况下,我在执行有问题的导入之前打印了 print(os.environ['PYTHONPATH'])
,并且在使用 python3 和 coverage3 时打印了此类 var 的正确值。
关于问题可能是什么的任何线索? 谢谢。
我通过在源目录和测试目录中添加 __init__.py
解决了这个问题。即使目录没有 __init__.py
文件,python3 似乎也可以使用 PYTHONPATH 找到源,但 coverage3 要求将目录设置为模块。
这适用于我当前的配置,但我不确定它是否是一般 Python 和覆盖行为。