我是创建Conda包的新手。我的问题是:
我有一个只有一个二进制可执行程序的工具。没有其他依赖关系。我尝试生成一个Conda包,如下所示:
- 我制作了一个
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
- 我使用 构建Conda包
conda build XXXXX
步骤2生成如下文件:
/conda-bld/linux-64/XXXXX-1.0-0.tar.bz2
- 当我运行
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.yaml
和build.sh
。它只是从上游的GitHub tarball复制二进制文件。
一般来说,我不建议编写复制二进制文件的食谱,但我不能否认这是阻力最小的途径。相反,我更喜欢将软件作为配方的一部分进行编译。这让二进制文件使用动态链接库,而不是静态构建,这是Conda最显著的优势之一。