Как установить perl-путь каждого perl-скрипта для сборки conda - PullRequest
0 голосов
/ 06 октября 2018

Я уже некоторое время ударился об это, и мне нужна помощь.У меня есть хороший маленький пакет Perl, который я разработал.Работает отлично.Он имеет простую процедуру установки:

perl makefile.PL
make
make install

Я пытался написать свой первый рецепт conda, чтобы я мог в конечном итоге использовать его для создания пакета в galaxy, который автоматически устанавливается через bioconda.

Проблема в том, что описанной выше процедуры недостаточно для сценария conda build.sh, и я не знаю, как заставить строку shebang установленного сценария perl иметь правильный путь 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 голосов
/ 10 октября 2018

Как я и подозревал, вам не нужно предоставлять INSTALL_BASE=${PREFIX} или даже PREFIX=${PREFIX} для Makefile.PL, чтобы он работал.Тот факт, что сценарий, найденный в переменной PATH, имеет неправильный путь интерпретатора perl, предполагает, что может существовать некоторая скомпилированная версия perl, доступная при запуске сценария, которая отличается от той, которая использовалась при создании сценария.Это согласуется с проблемой с различными путями в @INC.

. Оказалось, что файл meta.yaml имел perl в 2 местах: в requirements:build: и requirements:host: и, следовательно, в 2 разных версияхPerl использовался во время сборки против запуска на хосте.При удалении под requirements:build: в файле meta.yaml есть только 1 версия perl, и конфликт разрешается.Все, что нужно в файле build.sh:

perl Makefile.PL INSTALLDIRS=site
make
make install

Просто убедитесь, что в meta.yaml есть:

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

Может быть заманчиво поместить perl подраздел build, потому что вы используете вызов perl в скрипте build.sh, но он находится на хосте, когда сборка завершена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...