我已经为此努力了一段时间,我需要一些帮助。我有一个很好的perl开发包。效果很好。它具有简单的安装过程:
perl makefile.PL
make
make install
我一直在尝试编写我的第一个conda食谱,以便最终使用它在银河系上创建一个可通过bioconda自动安装的软件包。
问题是上述过程不足以使用conda build.sh脚本,而且我不知道如何使已安装的perl脚本的shebang行具有正确的perl路径。我首先尝试过:
perl Makefile.PL INSTALL_BASE=${PREFIX} INSTALLDIRS=site
make
make install
基于我在其他食谱中看到的内容,但这会导致错误:
/Users/rleach/local/miniconda3/conda-bld/vcfsamplecompare_1538773699290/test_tmp/run_test.sh: /Users/rleach/local/miniconda3/conda-bld/vcfsamplecompare_1538773699290/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pla/bin/vcfSampleCompare.pl: /Users/rleach/local/miniconda3/conda-bld/vcfsamplecompare_1538773699290/_build: bad interpreter: No such file or directory
Tests failed for vcfsamplecompare-v2.005-pl526_0.tar.bz2 - moving package to /Users/rleach/local/miniconda3/conda-bld/broken
我在构建输出中注意到了这样的注释:
Renaming build prefix directory, /Users/rleach/local/miniconda3/conda-bld/vcfsamplecompare_1538773699290/_build_env to /Users/rleach/local/miniconda3/conda-bld/vcfsamplecompare_1538773699290/build_prefix_moved_vcfsamplecompare-v2.005-pl526_0_osx-64
因此,出于直觉,我在make install
之后添加了它:
sed -i.bak 's|_build_env|build_prefix_moved_vcfsamplecompare-v2.005-pl526_0_osx-64|g' ${PREFIX}/bin/vcfSampleCompare.pl
那行得通! (无论如何,它使我摆脱了第一个错误-现在它抱怨它也应该安装在@INC中的模块。-一次只能做一件事...)
问题是,我不知道在哪里可以找到字符串“ build_prefix_moved_vcfsamplecompare-v2.005-pl526_0_osx-64”。在不同的系统上,这显然是不同的。如果我假设“ build_prefix_moved_”是静态的,那么我知道哪些环境变量会给我“ vcfsamplecompare”,“ v2.005”和“ 64”(甚至可能是“ osx”)-但我找不到任何具有值“ pl526_0”,因此我似乎没有能力完全自行构建字符串...
那么这里的常规知识是什么?我应该如何在软件包脚本的顶部设置perl解释器路径?
答案 0 :(得分:0)
正如我所怀疑的那样,您无需为Makefile.PL提供INSTALL_BASE=${PREFIX}
甚至PREFIX=${PREFIX}
即可使它起作用。在PATH上找到的脚本具有错误的perl解释器路径这一事实表明,运行该脚本时可能有一些perl的编译版本可用,这与构建该脚本时使用的版本不同。这与@INC
中使用不同路径的问题是一致的。
事实证明,meta.yaml
文件在2个地方有perl:在requirements:build:
和requirements:host:
下,因此在构建和在主机上运行期间使用了2个不同版本的perl 。通过删除meta.yaml文件中requirements:build:
下的版本,只有1个版本的perl可以解决冲突。 build.sh文件中需要的全部是:
perl Makefile.PL INSTALLDIRS=site
make
make install
只需确保meta.yaml具有:
requirements:
build:
- make
host:
- perl
run:
- perl
将perl
放在build部分下可能很诱人,因为您正在build.sh脚本中使用对perl的调用,但是构建完成后它就在主机上。