代码之家  ›  专栏  ›  技术社区  ›  hepcat72

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

  •  1
  • hepcat72  · 技术社区  · 7 年前

    perl makefile.PL
    make
    make install
    

    我一直在尝试写我的第一个康达配方,这样我最终可以用它在galaxy上创建一个包,通过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
    

    问题是,我不知道在哪里可以找到字符串“build\u prefix\u moved\u vcfsamplecompare-v2.005-pl526\u 0\u osx-64”。很明显,在不同的系统上会有所不同。如果我假设“build\u prefix\u moved\ux”是静态的,我知道哪些环境变量会给我“vcfsamplecompare”、“v2.005”和“64”(甚至可能是“osx”)——但是我找不到任何值为“pl526\u 0”的东西,所以我似乎没有能力独自完全构建字符串。。。

    1 回复  |  直到 7 年前
        1
  •  1
  •   hepcat72    7 年前

    正如我所怀疑的,你不应该提供 INSTALL_BASE=${PREFIX} 甚至 PREFIX=${PREFIX} 使Makefile.PL正常工作。在路径上找到的脚本具有错误的perl解释器路径这一事实表明,在运行脚本时,可能存在与构建脚本时使用的版本不同的perl编译版本。这与问题的不同路径是一致的 @INC

    结果发现 meta.yaml 文件在两个地方有perl: requirements:build: requirements:host: 因此,在构建过程中使用了两个不同版本的perl,而不是在主机上运行。把下面的那个 要求uirements:build: 在meta.yaml文件中,只有一个版本的perl,冲突得到了解决。build.sh文件中所需的全部内容是:

    perl Makefile.PL INSTALLDIRS=site
    make
    make install
    

    只需确保meta.yaml具有:

    requirements:
      build:
        - make
      host:
        - perl
      run:
        - perl
    

    这可能是诱人的 perl