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

时间:2019-07-14 21:56:29

标签: python package anaconda software-distribution conda-forge

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

我已经阅读了有关贡献软件包here的conda-forge文档和有关通过meta.yaml配方文件here定义元数据的conda文档

我向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.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部分的信息?

1 个答案:

答案 0 :(得分:0)

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

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和许多其他键来补充,以正确格式化测试环境。我认为,鉴于您的问题描述:

  

对于我的软件包,我想运行一个测试脚本,该脚本存在于我的软件包中,取决于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或类似位置的任意数量的调用,以转到所需的位置。