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

标签 python package anaconda software-distribution conda-forge

我正在尝试让 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.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 配方时,(据我所知)有三种方法来定义将要执行的测试:

  • 在配方目录中创建run_test.[py,pl,sh,bat](这是由conda-build自动发现的
  • include 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测试/。我不确定我是否正确解释了您的目录要求,但您的 test/commands 可以包含任意数量的对 pushd 的调用或类似的调用,以便移动到您所在的位置需要。

关于python - 如何添加正确的 'meta.yaml' 配方文件来创建 conda-forge 包分发?特别是配方文件中的 `test` 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57031437/

相关文章:

python - 类型错误:apply_gradients() 获得意外的关键字参数 'global_step'

python - 颠覆没有通过 python 脚本看到我的更新

python - 使用多个条件在数据框中创建列

python - 根据两列将颜色表示为图例

python - 管理 __all__ 的导出装饰器

javascript - 如果我在浏览器列表中组合未死有什么区别?

python - 'libpng 错误 : Read Error' by using open cv imread

anaconda - 如何在 Mac OS Anaconda Navigator 中的另一个驱动器上启动 Jupyter 笔记本?

python - 包级别还存在哪些其他特殊模块(文件)?

python - 手动删除 anaconda python 中 pkgs 文件夹中的所有文件是否安全?