【问题标题】:how to distribute python packages with unittests as executable entry points?如何分发带有 unittests 作为可执行入口点的 python 包?
【发布时间】:2015-04-21 12:01:01
【问题描述】:

我正在编写一个 python 包,其中将可执行脚本注册到“setup.py”作为入口点。安装软件包时,这些被放置 进入没有“.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()

【问题讨论】:

    标签: python package pip setuptools


    【解决方案1】:

    默认情况下unittest.main 尝试在__main__ 模块中查找测试。因为您尝试从入口点运行测试,所以模块不再是 __main__

    如果您尝试将module 参数传递给unittest.main 函数(即mypackage.test_package),它可能会起作用。

    更多详情可以查看unittest.main的文档:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 2012-02-24
      • 2017-11-18
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多