从另一个文件夹导入函数的简单方法,但要使用 pytest

Kan*_*bot 0 python pytest

我正在寻找一种从另一个文件夹导入函数的简单方法:

|--mylib
|   |--__init__.py
|   |--mylib2.py
|
|--mytest
|   |--other.py
|   |--test_one.py
|
|--mymain.py
Run Code Online (Sandbox Code Playgroud)

mylib2.py

def suma(a,b):
    return a+b
Run Code Online (Sandbox Code Playgroud)

mymain.py

from mylib.mylib2 import suma
def main():
    a=3
    b=4
    c=suma(a,b)
    print(c)


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

其他.py

from mylib.mylib2 import suma

c=suma(1,2)
print(c)
Run Code Online (Sandbox Code Playgroud)

测试一.py

from mylib.mylib2 import suma

def test_nothing():
    assert True

def test_crash():
    e=0
    #d=30/e
    assert True
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我无法正常从 other.py 调用 suma (因为我不知道如何正确地将 mylib2.py 包含在 mytest 文件夹中的文件中,但按照这个答案我可以这样做

python3 -m mytest.other
3
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何运行 pytest(包括库)

如果我进行 pytest 我会收到一条消息

    from mylib.mylib2 import suma
E   ModuleNotFoundError: No module named 'mylib'
Run Code Online (Sandbox Code Playgroud)

如何以简单的方式运行测试?

hid*_*ush 5

TL;DR:您还应该添加__init__.py内部mytest文件夹。

解释:

module和之间的概念很容易被误解package。即使在使用 Python 编程多年之后,我仍然不确定我是否完全理解它们。如果我错了,请纠正我。

  1. 如果mytest文件夹中没有__init__.py,解释器在执行命令时会认为mylib是一个包,类似于numpy, 。搜索过程基于您的. 但是,从技术上讲,您没有安装软件包,因此解释器将引发如下错误:。pandaspytestPYTHONPATHmylib ModuleNotFoundError: No module named 'mylib'

  2. 通过添加__init__.py, pytest 将认为mylibmytest是普通模块,因此您可以mylib.mylib2照常导入。

进一步阅读:

十亿次相对进口

Pytest:如何解决测试文件夹中缺少 __init__.py 的问题?