如何添加正确的“meta.yaml”配方文件来创建 conda-forge 包发行版?特别是配方文件中的“test”部分?

问题描述 投票:0回答:1

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

我已经阅读了有关贡献包的 conda-forge 文档 here 以及有关通过

meta.yaml
配方文件定义元数据的 conda 文档 here

我向

conda-forge/staged-recipes
存储库提交的拉取请求位于 here。我的
meta.yaml
文件可以在该拉取请求中找到,但我也会在此处以文本形式发布它:

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

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

 source:
  url: https://pypi.org/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
部分进行建模吗?

python package anaconda software-distribution conda-forge
1个回答
6
投票

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

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

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

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

这些可以通过

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

对于我的包,我想运行一个测试脚本,该脚本存在于我的包中,依赖于 pytest 包,并且需要在我的包所在位置的父目录中运行

你可能想要这样的东西:

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
或类似内容的任意数量的调用,以移动到您需要的位置。

© www.soinside.com 2019 - 2024. All rights reserved.