Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置每个perl脚本';s conda构建的perl路径_Perl_Conda - Fatal编程技术网

如何设置每个perl脚本';s conda构建的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包。效果很好。它有一个简单的安装过程:

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中找不到作为包的一部分安装的模块。。。