如何为conda构建设置每个perl脚本的perl路径

时间:2018-10-05 22:23:54

标签: perl conda

我已经为此努力了一段时间,我需要一些帮助。我有一个很好的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解释器路径?

1 个答案:

答案 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的调用,但是构建完成后它就在主机上。