gpt4 book ai didi

python - 如何使用单元测试作为可执行入口 pip 分发 python 包?

转载 作者:行者123 更新时间:2023-12-04 18:04:58 25 4
gpt4 key购买 nike

我正在编写一个 python 包,该包将可执行脚本注册到“setup.py”中作为入口 pip 。当安装包时,这些被放置
进入没有“.py”扩展名的python包安装的“bin”目录。我希望能够运行包的单元测试
安装包后也可以作为可执行文件。单元测试位于 setup.py 的“entry_points”中的“test_package.py”中:
运行python包

setup(
entry_points={
'console_scripts': [
'my_exec = mypackage.my_exec:main'
'test_package = mypackage.test_package.main'],
}
)

test_package.py 脚本从“test-files”读取一些文件:
mypackage/
setup.py
mypackage/
my_exec.py
test_package.py
# files needed to run tests
test-files/
# directory containing files written by 'test_package'
test-results/

当我在包内运行“test_package.py”时,它工作正常。但是,当我安装它并且“test_package”在“bin”中创建为可执行文件时,然后运行:
$ test_package

从命令行找不到测试。它说“运行 0 个测试”。这个目录结构有什么问题?以某种方式分发单元测试的正确方法是什么
即使它们创建文件,它们也可以从命令行运行?如果该软件包是为使用 sudo 权限的人安装的,那么我希望没有 sudo 权限的用户能够运行这些软件包,而无需对安装软件包的位置进行写访问。

test_package.py 的结构是:
class TestPackage(unittest.Test):
def setUp():
...
def test_foo():
# read stuff from 'test-files/'
# ...
# output stuff to 'test-results/'
# ...

def main():
unittest.main()


if __name__ == '__main__':
main()

最佳答案

默认 unittest.main尝试在 __main__ 中查找测试模 block 。因为您尝试从入口 pip 运行测试,所以模 block 不是 __main__了。

可能如果你试图通过 module论据 unittest.main函数是 mypackage.test_package它可能工作。

有关更多详细信息,您可以查看 unittest.main 的文档。 :

  • Python3 - https://docs.python.org/3/library/unittest.html#unittest.main
  • Python2 - https://docs.python.org/2/library/unittest.html#unittest.main
  • 关于python - 如何使用单元测试作为可执行入口 pip 分发 python 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618285/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com