Pytest 找不到 python 找到的文件



我发现了许多类似的问题,但没有一个现有的线程讨论这个确切的情况。

我有一个简单的python模块和pytest:

project
mymod
__init__.py
const.py
mymodclass.py
tests
test_mymodclass.py
conftest.py

我的模块实现类包括 const.py 文件,以便使用 CONSTANT:

from const import CONSTANT
class MyModClass:
def initialize(self):
return CONSTANT
def main():
test_mod = MyModClass()
test_mod.initialize()
if __name__ == "__main__":
main()

运行mymodclass.py工作得很好。 运行python mymodclass.py工作得很好。

现在我想运行一些 pytest 单元测试。这些可以在test_mymodclass.py中找到:

from mymod.mymodclass import MyModClass
test_mod = MyModClass()
assert( test_mod.initialize() == CONSTANT )

但是,从project文件夹运行pytest会导致错误:

E   ModuleNotFoundError: No module named 'const'

pytest 似乎找不到mymodclass.py在本地文件夹中找到的const.py

我可以更改mymodclass.py导入from mymod.const import *,pytest 将起作用! 不幸的是,现在python无法直接从mymod文件夹执行mymodclass.py

ModuleNotFoundError: No module named 'mymod'

看起来我可以让 python 高兴或 pytest 开心,但不能两者兼而有之。

project/mymod目录内部运行python mymodclass.pyimport const工作的原因是因为 Python 将当前工作目录添加到sys.path中。这允许将const解析为./const.py

但是,当运行测试时,当前工作目录很可能project/,因此尝试导入const将尝试解析不存在的project/const.py。将其更改为mymod.const会将模块解析为project/mymod/const.py,这有效。

如果要直接运行mymodclass.py,同时仍使用import mymod.const,请确保工作目录project/,并按python mymod/mymodclass.py调用脚本。

最新更新