如何为工具创建conda包



我是创建Conda包的新手。我的问题是:

我有一个只有一个二进制可执行程序的工具。没有其他依赖关系。我尝试生成一个Conda包,如下所示:

  1. 我制作了一个meta.yaml,它包含:
package:
name: XXXXX
version: 1.0
source:
path: $HOME/bin/XXXXX/
build:
script:
- chmod -R 777 $HOME/bin/XXXXX/YYY
- export PATH=$HOME/bin/XXXXX/:$PATH
about:
license: open-source
  1. 我使用
  2. 构建Conda包
conda build XXXXX
步骤2生成如下文件:
/conda-bld/linux-64/XXXXX-1.0-0.tar.bz2
  1. 当我运行
conda install --offline  /conda-bld/linux-64/XXXXX-1.0-0.tar.bz2

conda list上显示为

XXXXX    1.0    0    file:///$HOME/xxxxxxx/xxxxx/xxxxx/conda-bld

但是当尝试使用点击标签获取XXXXX时,没有任何东西出现。

创建这个包的目的是在Conda安装之后,YYY应该可以在Conda环境中访问。

你知道怎么让它正常工作吗?

有几个问题。

复制到$PREFIX/bin

这里的主要问题是试图设置shell环境变量。这不会存在于构建包的过程之外。相反,Conda包的工作方式是将文件复制到相对于环境前缀的路径中。因此,您真正需要做的是将二进制文件复制到$PREFIX/bin,然后添加可执行权限。类似的,

build:
number: 0
script:
- "mkdir -p $PREFIX/bin"
- "cp PromPredict_mulseq $PREFIX/bin/PromPredict_mulseq"
- "chmod u+x $PREFIX/bin/PromPredict_mulseq"

不要依赖$HOME

另一个问题可能是如何指定源。我不确定$HOME变量将得到正确解决。我认为有一些相对路径(例如,../PromPredict_mulseq)更可靠,最好有一个tarball来指向。您可能需要对此进行调试,以确保找到二进制文件。它可以帮助运行conda build--dirty标志,然后检查conda-bld目录下的工作文件夹。

使用--use-local标志按名称安装

最后,与其指定构建文件的完整路径,不如通过名称指定,然后包括--use-local标志,例如,

conda install --use-local prompredict

额外的讨论检查复制二进制文件的具体示例包可能会有所帮助。考虑查看Bioconda存储库中STAR配方的meta.yamlbuild.sh。它只是从上游的GitHub tarball复制二进制文件。

一般来说,我不建议编写复制二进制文件的食谱,但我不能否认这是阻力最小的途径。相反,我更喜欢将软件作为配方的一部分进行编译。这让二进制文件使用动态链接库,而不是静态构建,这是Conda最显著的优势之一。

最新更新