【问题标题】:How to publish my unit tests with my python package如何使用我的 python 包发布我的单元测试
【发布时间】:2021-11-26 00:30:32
【问题描述】:

如何将我的测试与我的包一起发布?我想将我的测试与 src 分开,如下所示。

mypackage/
    src/
        mypackage/
            __init__.py
            hello.py
    tests/
        test_hello.py

而我setup.cfg的内容是:

[metadata]
name = mypackage
version = 1.5.0
author = John Henckel
url = https://test.com
[options]
package_dir =
    = src
packages = find:
[options.packages.find]
where = src

但是,当我执行 build + twine 时,测试不包括在内。有没有办法将测试包含在 tar 和 wheel 中?

【问题讨论】:

    标签: python packaging


    【解决方案1】:

    这并不是真正的解决方案,但作为一个 hack,我决定将 tests 目录复制到 src/mypackage(暂时,在构建之前)作为持续集成管道的一部分。我的构建管道脚本如下所示:

    git clone https://.../mypackage
    cd mypackage
    pip install pytest -r requirements.txt
    pytest
    pip install build twine
    cp -R tests src/mypackage
    python -m build --wheel
    twine upload ... dist/*.whl
    

    这很好用。在此之后,我可以pip install mypackage 并通过导航到包根目录(在站点包下)并运行pytest 来运行测试。

    pytest documentation 说我也应该能够做到pytest --pyargs mypackage。但这不起作用。我不知道为什么。 pytest 中的错误?

    【讨论】:

      【解决方案2】:

      当人们想要将 tests/ 文件夹与代码一起分发时,他们似乎将它们放在了模块目录中。

      Related SO question.

      你可以看到他们使用的项目结构here

      编辑: This link 建议您只需列出您的 setup.py 中的目录

          packages=['an_example_pypi_project', 'tests'],
      

      我找不到任何关于 setup.cfg 的信息,但我想它应该是一样的。

      【讨论】:

      • 感谢确实有效。如果我将测试设置为 src/mypackage 下的子目录,那么它就会被发布。但是,我不想那样做。我希望我可以在setup.cfg 中添加一些魔法,它会就好像测试在 src/mypackage 下而不实际将它移动到那里。
      • 这两个链接都来自 2009 年。我尝试将测试添加到包列表中,但效果不佳。用户做pip install mypackagetests目录直接在site-packages下!!所以如果两个包都有测试,第二个会破坏第一个!顺便说一句,我认为 pip 并没有阻止这种情况发生,甚至显示警告,这令人惊讶。恶意包很容易使用与另一个包相同的目录名并破坏它。 'pip' 不能更好地隔离软件包,这很愚蠢。
      猜你喜欢
      • 1970-01-01
      • 2018-10-29
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2016-11-22
      相关资源
      最近更新 更多