如何分发 python 以单元测试作为可执行入口点的包?
how to distribute python packages with unittests as executable entry points?
我正在编写一个 python 程序包,其中将可执行脚本注册到 'setup.py' 作为入口点。当安装包时,这些被放置
进入 python 包安装的 "bin" 目录,不带“.py”扩展名。我希望能够 运行 包的单元测试
安装包后也可以作为可执行文件。单元测试在 "test_package.py" 中,它在 setup.py 的 "entry_points" 中:
运行 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" 中创建为可执行文件时,然后 运行ning:
$ test_package
从命令行找不到测试。它说 "ran 0 tests"。这个目录结构有什么问题?以某种方式分发单元测试的正确方法是什么
他们可以从命令行 运行 即使他们创建文件?如果软件包是为使用 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__
模块中查找测试。因为您尝试从入口点 运行 进行测试,所以该模块不再 __main__
。
可能如果您尝试将 module
参数传递给 unittest.main
函数,即 mypackage.test_package
它可能会起作用。
有关详细信息,请参阅 unittest.main
的文档:
我正在编写一个 python 程序包,其中将可执行脚本注册到 'setup.py' 作为入口点。当安装包时,这些被放置 进入 python 包安装的 "bin" 目录,不带“.py”扩展名。我希望能够 运行 包的单元测试 安装包后也可以作为可执行文件。单元测试在 "test_package.py" 中,它在 setup.py 的 "entry_points" 中: 运行 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" 中创建为可执行文件时,然后 运行ning:
$ test_package
从命令行找不到测试。它说 "ran 0 tests"。这个目录结构有什么问题?以某种方式分发单元测试的正确方法是什么 他们可以从命令行 运行 即使他们创建文件?如果软件包是为使用 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__
模块中查找测试。因为您尝试从入口点 运行 进行测试,所以该模块不再 __main__
。
可能如果您尝试将 module
参数传递给 unittest.main
函数,即 mypackage.test_package
它可能会起作用。
有关详细信息,请参阅 unittest.main
的文档: