如何添加适当的 'meta.yaml' 配方文件来创建 conda-forge 包分发?特别是配方文件中的“测试”部分?

How to add a proper 'meta.yaml' recipe file for creating a conda-forge package distribution? Particularly `test` section in recipe file?

我正在尝试让 conda-forge 托管一个我创建的 python 包,它已经在 PyPI 上:https://pypi.org/project/ludoSim-jaib1/

我已经阅读了有关贡献包的 conda-forge 文档 here and the conda documentation on defining metadata via a meta.yaml recipe file here

我向 conda-forge/staged-recipes 存储库提交的拉取请求是 here。我的 meta.yaml 文件可以在该拉取请求中找到,但我也会 post 在此处的文本中:

{% set name = "ludoSim-jaib1" %}
{% set version = "0.0.1" %}

 package:
  name: {{ name|lower }}
  version: {{ version }}

 source:
  url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz
  sha256: 3342abcd52a6a18e1d4b0e2e626c051f24133187647c6618c0f81d7add28d543

 build: 
  number: 0
  script: python -m pip install . --no-deps -vv 
  skip: true  # [py<30]

 requirements:
  host:
    - python
    - pip
  run:
    - python

 test:
  source_files:
    tests/test_ludo.py
    tests/runTest.py
  imports:
    - ludoSim
    - pytest

 about:
  home: http://github.com/jaib1/ludoSim
  license: GPL-3.0
  license_family: GPL
  license_file: LICENSE.md
  summary: A simple ludo simulator
  description: See the package README.md for more information.

 extra:
  recipe-maintainers:
    - jaib1

我认为我在 meta.yaml 配方中一定有一些简单的错误,但由于这是我第一次向 conda-forge 提交包,所以我不确定到底是什么。在阅读文档时,我对配方文件中的 test 部分感到困惑:我不完全理解 test 部分中的信息如何用于构建的 运行 测试:对于我的包,我想 运行 我的包中存在的测试脚本,取决于 pytest 包,并且需要 运行 在我的包所在位置的父目录中。

我能否获得有关如何修复我的 meta.yaml 配方文件以及如何为我的场景建模该文件中的 test 部分的信息?

以下文档是我在下面重复的所有内容的规范参考:

https://docs.conda.io/projects/conda-build/en/stable/resources/define-metadata.html#test-section

创建 conda 配方时,有(AFAIK)三种方法来定义将要执行的测试:

  • 在食谱目录中创建run_test.[py,pl,sh,bat](这是conda-build
  • 自动发现的
  • 包含 test/imports 以测试 python 模块是否可以导入
  • 包括 test/commands 到 运行 任意 shell 命令

这些可以通过 source_filesrequires 和许多其他键来补充,以正确格式化测试环境。我认为,鉴于您的问题描述:

for my package, I want to run a test script which exists in my package, depends on the pytest package, and which needs to be run in the parent directory of the location my package is located in

你可能想要这样的东西:

test:
  imports:
    - ludoSim
  source_files:
    - tests/test_ludo.py
    - tests/runTest.py
  requires:
    - pytest
  commands:
    - pytest tests/

这应该将给定的 source_files 从您的源文件夹复制到测试目录,然后安装 pytest,然后 运行 pytest tests/。我不确定我是否正确解释了您的目录要求,但是您的 test/commands 可以包括对 pushd 或类似内容的任意次数的调用,以移动到您需要的位置。