构建drug2cell的Conda Recipe测试失败:drug2cell命令未找到
问题
我正从GitHub仓库为drug2cell工具构建Conda Recipe,包已成功构建但测试环节失败。以下是我的meta.yaml文件内容:
{% set name = "drug2cell" %} {% set version = "main" %} {% set sha256 = "a6353f989f92f05b36972d42795f7f071245d351bf05027dc7e3e4a074ea5bb8" %} package: name: {{ name|lower }} version: {{ version }} source: url: https://github.com/teichlab/drug2cell/archive/main.tar.gz sha256: {{ sha256 }} build: noarch: python number: 0 script: {{ PYTHON }} -m pip install . --no-deps --ignore-installed -vv requirements: host: - python - pip run: - python - anndata - pandas - numpy - statsmodels - scipy - blitzgsea test: commands: - drug2cell --version
测试时出现如下错误:
drug2cell --version /opt/anaconda3/conda-bld/drug2cell_1732816346257/test_tmp/run_test.sh: line 7: drug2cell: command not found WARNING: Tests failed for drug2cell-main-py_0.tar.bz2 - moving package to /opt/anaconda3/conda-bld/broken CondaBuildUserError: TESTS FAILED: drug2cell-main-py_0.tar.bz2
解决方案
测试失败的核心原因是drug2cell命令未被正确安装到Conda环境的可执行路径中,以下是具体排查和解决方法:
1. 检查原项目的命令入口配置
pip安装生成可执行命令的前提是项目的setup.py或pyproject.toml中配置了console scripts或entry points。需要确认drug2cell仓库的配置文件:
- 若用
setup.py,需存在类似代码:from setuptools import setup setup( # 其他配置项 entry_points={ 'console_scripts': [ 'drug2cell = drug2cell.main:main', # 需对应项目实际的入口模块和函数 ], }, ) - 若用
pyproject.toml,需存在类似配置:[project.scripts] drug2cell = "drug2cell.main:main"
如果原项目没有该配置,要么向仓库提交PR补充,要么在Conda构建流程中手动处理。
2. 在Conda构建中手动生成命令脚本
如果原项目未配置入口,可在meta.yaml的build阶段添加步骤,手动创建可执行脚本:
修改build部分:
build: noarch: python number: 0 script: | {{ PYTHON }} -m pip install . --no-deps --ignore-installed -vv # 手动创建drug2cell命令 echo '#!/usr/bin/env python' > ${PREFIX}/bin/drug2cell echo 'from drug2cell.cli import main' >> ${PREFIX}/bin/drug2cell # 替换为项目实际入口模块 echo 'if __name__ == "__main__":' >> ${PREFIX}/bin/drug2cell echo ' main()' >> ${PREFIX}/bin/drug2cell chmod +x ${PREFIX}/bin/drug2cell
注意将drug2cell.cli替换为项目真实的命令行入口模块。
3. 修改测试命令为模块调用方式
若暂时无法修复命令生成问题,可跳过直接调用drug2cell,改用Python模块调用的方式测试:
test: commands: - python -m drug2cell --version # 需确认项目支持模块调用方式
4. 验证构建后的文件结构
可在构建脚本中添加调试步骤,查看安装后的文件:
在build的script末尾添加:
ls -la ${PREFIX}/bin/ # 检查bin目录是否存在drug2cell可执行文件
构建时会输出该目录内容,帮助确认命令是否被正确安装。
内容的提问来源于stack exchange,提问作者Menna Ahmed Youssef
相关产品推荐
相关产品推荐

