如何设置每个perl脚本';s conda构建的perl路径
我已经有一段时间了,我需要一些帮助。我开发了一个很好的小perl包。效果很好。它有一个简单的安装过程:如何设置每个perl脚本';s conda构建的perl路径,perl,conda,Perl,Conda,我已经有一段时间了,我需要一些帮助。我开发了一个很好的小perl包。效果很好。它有一个简单的安装过程: perl makefile.PL make make install 我一直在尝试写我的第一个康达配方,这样我最终可以用它在galaxy上创建一个包,通过bioconda自动安装 问题是上面的过程对于conda build.sh脚本来说是不够的,我不知道如何使安装的perl脚本的shebang行具有正确的perl路径。我第一次尝试这个: perl Makefile.PL INSTALL_BA
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
所以凭直觉,我在我的makeinstall
之后添加了这个:
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解释器路径?正如我所怀疑的,您不必为Makefile.PL提供
INSTALL_BASE=${PREFIX}
甚至PREFIX=${PREFIX}
。在路径上找到的脚本具有错误的perl解释器路径这一事实表明,在运行脚本时,可能存在与构建脚本时使用的版本不同的perl编译版本。这与@INC
中不同路径的问题一致
原来meta.yaml
文件在两个地方有perl:在requirements:build:
和requirements:host:
下,因此在构建期间使用了两个不同版本的perl,而不是在主机上运行。通过删除meta.yaml文件中requirements:build:
下的一个,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的调用,但构建完成后它就在主机上。ExtUtils::MakeMaker会将它安装的每个脚本的shebang重写到运行Makefile.PL的perl解释器中。但是请注意,如果shebang是#,则它不会这样做/usr/bin/env perl
(否则建议用于未安装的脚本)。我对conda一无所知,也不太清楚这个构建过程与shebang的Perl解释器的位置有什么关系。Cona为每个构建创建了一个可以加载/卸载的环境(类似于module命令)。Perl也安装在环境中,以便独立于其他环境。因此,我需要知道perl解释器将要去哪里,以便shebang是正确的。即使我在shebang上放置了一个env,为了正确起见,我也必须使用独立环境中的env命令进行安装。在安装到正确的位置后,您可以使用perl解释器运行安装吗?这会正确地重写shebang,我想你是对的。我原以为任何命令(如env)都必须针对环境,但bioconda上的其他人也推荐了同样的命令。所以我会用它。我相信它会起作用的。这是我的第一份康达食谱。我只是想确保我做的正确。所以使用#/脚本顶部的usr/bin/env perl
允许脚本在没有解释器错误的情况下运行,但下一个错误是它在@INC中找不到作为包的一部分安装的模块。。。