Невозможно установить модули perl через cpanm в средах conda

Я пытаюсь установить модули perl через cpanm внутри среды conda с установленным perl. Среда conda была построена со следующим определением:

name: perl_env

channels:
  - bioconda
  - conda-forge
  - defaults

dependencies:
  - perl=5.26
  - perl-app-cpanminus
  - perl-local-lib
  - gcc_impl_linux-64
  - gxx_linux-64
  - openmpi=4.1.0

Среда получается со следующими установленными пакетами:

# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       1_gnu    conda-forge
binutils_impl_linux-64    2.35.1               h193b22a_1    conda-forge
binutils_linux-64         2.35                hc3fd857_29    conda-forge
gcc_impl_linux-64         9.3.0               h28f5a38_17    conda-forge
gcc_linux-64              9.3.0               h7247604_29    conda-forge
gxx_impl_linux-64         9.3.0               h53cdd4c_17    conda-forge
gxx_linux-64              9.3.0               h0d07fa4_29    conda-forge
kernel-headers_linux-64   2.6.32              h77966d4_13    conda-forge
ld_impl_linux-64          2.35.1               hea4e1c9_1    conda-forge
libgcc-devel_linux-64     9.3.0               hfd08b2a_17    conda-forge
libgcc-ng                 9.3.0               h5dbcf3e_17    conda-forge
libgfortran-ng            9.3.0               he4bcb1c_17    conda-forge
libgfortran5              9.3.0               he4bcb1c_17    conda-forge
libgomp                   9.3.0               h5dbcf3e_17    conda-forge
libstdcxx-devel_linux-64  9.3.0               h4084dd6_17    conda-forge
libstdcxx-ng              9.3.0               h2ae2ef3_17    conda-forge
mpi                       1.0                     openmpi    conda-forge
openmpi                   4.1.0                h9b22176_1    conda-forge
perl                      5.26.2            h36c2ea0_1008    conda-forge
perl-app-cpanminus        1.7044                  pl526_1    bioconda
perl-carp                 1.38                    pl526_3    bioconda
perl-constant             1.33                    pl526_1    bioconda
perl-cpan-meta            2.150010                pl526_0    bioconda
perl-cpan-meta-requirements 2.140                   pl526_0    bioconda
perl-cpan-meta-yaml       0.018                   pl526_0    bioconda
perl-data-dumper          2.173                   pl526_0    bioconda
perl-encode               2.88                    pl526_1    bioconda
perl-exporter             5.72                    pl526_1    bioconda
perl-extutils-cbuilder    0.280230                pl526_1    bioconda
perl-extutils-makemaker   7.36                    pl526_1    bioconda
perl-extutils-manifest    1.72                    pl526_0    bioconda
perl-extutils-parsexs     3.35                    pl526_0    bioconda
perl-file-path            2.16                    pl526_0    bioconda
perl-file-temp            0.2304                  pl526_2    bioconda
perl-getopt-long          2.50                    pl526_1    bioconda
perl-ipc-cmd              1.02                    pl526_0    bioconda
perl-json-pp              4.04                    pl526_0    bioconda
perl-local-lib            2.000024                pl526_0    bioconda
perl-locale-maketext-simple 0.21                    pl526_2    bioconda
perl-module-build         0.4224                  pl526_3    bioconda
perl-module-corelist      5.20190524              pl526_0    bioconda
perl-module-load          0.32                    pl526_1    bioconda
perl-module-load-conditional 0.68                    pl526_2    bioconda
perl-module-metadata      1.000036                pl526_0    bioconda
perl-params-check         0.38                    pl526_1    bioconda
perl-parent               0.236                   pl526_1    bioconda
perl-perl-ostype          1.010                   pl526_1    bioconda
perl-scalar-list-utils    1.52            pl526h516909a_0    bioconda
perl-text-abbrev          1.02                    pl526_0    bioconda
perl-text-parsewords      3.30                    pl526_0    bioconda
perl-version              0.9924                  pl526_0    bioconda
sysroot_linux-64          2.12                h77966d4_13    conda-forge
zlib                      1.2.11            h516909a_1010    conda-forge

Conda env был активирован с помощью:

source /igatech/rd/dev/miniconda3/bin/activate
conda activate perl_env

Затем из оболочки:

eval $(perl -I/igatech/rd/dev/snakemake-workflows/annotation-maker_p/local/perl5/lib/perl5 -Mlocal::lib=/igatech/rd/dev/snakemake-workflows/annotation-maker_p/local/perl5)

Затем попробуйте установить пакеты forks с помощью cpanm:

env PERL5LIB="" PERL_LOCAL_LIB_ROOT="" PERL_MM_OPT="" PERL_MB_OPT="" cpanm --force --notest forks

--> Working on forks
Fetching http://www.cpan.org/authors/id/R/RY/RYBSKEJ/forks-0.36.tar.gz ... OK
Configuring forks-0.36 ... OK
==> Found dependencies: Acme::Damn
--> Working on Acme::Damn
Fetching http://www.cpan.org/authors/id/I/IB/IBB/Acme-Damn-0.08.tar.gz ... OK
Configuring Acme-Damn-0.08 ... OK
Building Acme-Damn-0.08 ... FAIL
! Installing Acme::Damn failed. See /home/mvidotto/.cpanm/work/1610645810.24326/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Module 'Acme::Damn' is not installed
! Bailing out the installation for forks-0.36.

Более подробно рассмотрим ошибку:

tail /home/mvidotto/.cpanm/work/1610645810.24326/build.log


cp Damn.pm blib/lib/Acme/Damn.pm
Running Mkbootstrap for Damn ()
chmod 644 "Damn.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Damn.bs blib/arch/auto/Acme/Damn/Damn.bs 644
"/usr/bin/perl" "/igatech/rd/dev/snakemake-workflows/annotation-maker_p/tests/snakemake/.snakemake/conda/4520f5b9/lib/site_perl/5.26.2/ExtUtils/xsubpp"  -typemap '/igatech/rd/dev/snakemake-workflows/annotation-maker_p/tests/snakemake/.snakemake/conda/4520f5b9/lib/5.26.2/ExtUtils/typemap'  Damn.xs > Damn.xsc
Can't locate object method "new" via package "ExtUtils::ParseXS" at /igatech/rd/dev/snakemake-workflows/annotation-maker_p/tests/snakemake/.snakemake/conda/4520f5b9/lib/site_perl/5.26.2/ExtUtils/xsubpp line 51.
make: *** [Damn.c] Error 255
-> FAIL Installing Acme::Damn failed. See /home/mvidotto/.cpanm/work/1610645810.24326/build.log for details. Retry with --force to force install it.
-> FAIL Installing the dependencies failed: Module 'Acme::Damn' is not installed
-> FAIL Bailing out the installation for forks-0.36.

То же самое происходит при установке различных пакетов perl (DBI). У меня не очень получается побороть эту ошибку поэтому очень прошу помощи, спасибо за совет.


Да, ты прав! При активации conda perl_env у меня было странное поведение. Если я наберу:

which perl

/usr/bin/perl

если я наберу:

command -v perl

/igatech/rd/dev/snakemake-workflows/annotation-maker_p/tests/snakemake/.snakemake/conda/4520f5b9/bin/perl

or

whereis perl

perl: /usr/bin/perl /igatech/rd/dev/snakemake-workflows/annotation-maker_p/tests/snakemake/.snakemake/conda/4520f5b9/bin/perl /usr/share/man/man1/perl.1.gz

If I do:

perl --version

This is perl 5, version 26, subversion 2 (v5.26.2) built for x86_64-linux-thread-multi

Copyright 1987-2018, Larry Wall
...

or If I do:

/usr/bin/perl --version

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 40 registered patches, see perl -V for more detail)

Copyright 1987-2012, Larry Wall
...

Честно говоря известно, что в моей системе команда which ведет себя странно. Не хотелось бы, чтобы это было причиной проблемы...

PS: conda env 4520f5b9 такой же, как perl_env


person vid1998    schedule 14.01.2021    source источник
comment
"/usr/bin/perl" -MExtUtils::Command::MM -e ....: Похоже, что на нем работает системный perl /usr/bin/perl, а не тот perl, который вы установили с помощью conda. Что показывает /usr/bin/perl --version? Если вы активируете среду conda conda activate perl_env, а затем запустите which perl и perl --version, что получится для них?   -  person Håkon Hægland    schedule 14.01.2021
comment
Я изменяю вопрос, чтобы ответить вам лучше ..   -  person vid1998    schedule 15.01.2021


Ответы (1)


Я могу попытаться ответить на первую часть вопроса: как использовать правильный perl при установке пакетов в среде conda. Я на Ubuntu 20.04:

  • Сначала я установил Anaconda в /home/hakon/anaconda3
  • Затем я создал тестовую среду:
$ conda create --name perl_test
$ conda activate perl_test
  • Установил perl 5.26.2 в окружение:
$ conda install -c anaconda perl
  • Инициализировал cpan (это предполагает, что у меня не было предыдущей конфигурации cpan (~/.cpan/) и локальной библиотеки (~/perl5/) в моем домашнем каталоге). Выберите вариант local::lib ниже:
$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/hakon/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes] 

 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]           


Autoconfiguration complete.

Attempting to bootstrap local::lib...

Writing /home/hakon/.cpan/CPAN/MyConfig.pm for bootstrap...
commit: wrote '/home/hakon/.cpan/CPAN/MyConfig.pm'
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/01mailrc.txt.gz
Reading '/home/hakon/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Fetching with HTTP::Tiny:
http://www.cpan.org/modules/02packages.details.txt.gz
Reading '/home/hakon/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Thu, 14 Jan 2021 19:17:03 GMT
  HTTP::Date not available
.............
  New CPAN.pm version (v2.28) available.
  [Currently running version is v2.18]
  You might want to try
    install CPAN
    reload cpan
  to both upgrade CPAN.pm and run the new version without leaving
  the current session.


...............................................................DONE
Fetching with HTTP::Tiny:
http://www.cpan.org/modules/03modlist.data.gz
Reading '/home/hakon/.cpan/sources/modules/03modlist.data.gz'
DONE
Writing /home/hakon/.cpan/Metadata
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/id/H/HA/HAARG/CHECKSUMS
Checksum for /home/hakon/.cpan/sources/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz ok
'YAML' not installed, will not store persistent state
Configuring H/HA/HAARG/local-lib-2.000024.tar.gz with Makefile.PL
Attempting to create directory /home/hakon/perl5

Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for local::lib
Writing MYMETA.yml and MYMETA.json
  HAARG/local-lib-2.000024.tar.gz
  /home/hakon/anaconda3/envs/perl_test/bin/perl Makefile.PL --bootstrap -- OK
Running make for H/HA/HAARG/local-lib-2.000024.tar.gz
cp lib/POD2/DE/local/lib.pod blib/lib/POD2/DE/local/lib.pod
cp lib/local/lib.pm blib/lib/local/lib.pm
cp lib/lib/core/only.pm blib/lib/lib/core/only.pm
cp lib/POD2/PT_BR/local/lib.pod blib/lib/POD2/PT_BR/local/lib.pod
Manifying 4 pod documents
  HAARG/local-lib-2.000024.tar.gz
  /bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 "/home/hakon/anaconda3/envs/perl_test/bin/perl" "-I/home/hakon/perl5/lib/perl5" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/bad_variables.t ...... ok   
t/carp-mismatch.t ...... ok   
t/classmethod.t ........ ok   
t/de-dup.t ............. ok   
t/lib-core-only.t ...... ok   
t/pipeline.t ........... ok   
t/shell.t .............. ok       
t/stackable.t .......... ok     
t/subroutine-in-inc.t .. ok   
t/taint-mode.t ......... ok   
All tests successful.
Files=10, Tests=196,  1 wallclock secs ( 0.04 usr  0.01 sys +  0.93 cusr  0.28 csys =  1.26 CPU)
Result: PASS
  HAARG/local-lib-2.000024.tar.gz
  /bin/make test -- OK
Running make install
Manifying 4 pod documents
Installing /home/hakon/perl5/lib/perl5/POD2/PT_BR/local/lib.pod
Installing /home/hakon/perl5/lib/perl5/POD2/DE/local/lib.pod
Installing /home/hakon/perl5/lib/perl5/local/lib.pm
Installing /home/hakon/perl5/lib/perl5/lib/core/only.pm
Installing /home/hakon/perl5/man/man3/lib::core::only.3
Installing /home/hakon/perl5/man/man3/local::lib.3
Installing /home/hakon/perl5/man/man3/POD2::PT_BR::local::lib.3
Installing /home/hakon/perl5/man/man3/POD2::DE::local::lib.3
Appending installation info to /home/hakon/perl5/lib/perl5/x86_64-linux-thread-multi/perllocal.pod
  HAARG/local-lib-2.000024.tar.gz
  /bin/make install  -- OK

local::lib is installed. You must now add the following environment variables
to your shell configuration files (or registry, if you are on Windows) and
then restart your command line shell and CPAN before installing modules:

PATH="/home/hakon/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/hakon/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/hakon/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/hakon/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/hakon/perl5"; export PERL_MM_OPT;

Would you like me to append that to /home/hakon/.bashrc now? [yes] no

Обратите внимание, что на предыдущий вопрос я ответил отрицательно.

commit: wrote '/home/hakon/.cpan/CPAN/MyConfig.pm'

You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v2.18)
Enter 'h' for help.

cpan[1]> q
Terminal does not support GetHistory.
Lockfile removed.

*** Remember to add these environment variables to your shell config
    and restart your shell before running cpan again ***

PATH="/home/hakon/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/hakon/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/hakon/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/hakon/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/hakon/perl5"; export PERL_MM_OPT;
  • Теперь я скопировал сгенерированную локальную библиотеку в среду conda:
$ echo $CONDA_PREFIX
/home/hakon/anaconda3/envs/perl_test
$ mv ~/perl5 /home/hakon/anaconda3/envs/perl_test
  • Затем настройте среду conda так, чтобы локальная библиотека активировалась при активации среды:
$ mkdir -p $CONDA_PREFIX/etc/conda/activate.d
$ vim $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
  • Добавьте следующее содержимое в предыдущий файл env_vars.sh:
export PATH="$CONDA_PREFIX/perl5/bin${PATH:+:${PATH}}"
export PERL5LIB="$CONDA_PREFIX/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}";
export PERL_LOCAL_LIB_ROOT="$CONDA_PREFIX/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}";
export PERL_MB_OPT="--install_base \"$CONDA_PREFIX/perl5\""
export PERL_MM_OPT="INSTALL_BASE=$CONDA_PREFIX/perl5"
  • Перезапустите среду conda, чтобы загрузить указанные выше переменные среды:
$ conda deactivate
$ conda activate perl_test
  • Установить cpanm
$ cpan App::cpanminus
  • Установите модуль:
$ which cpanm
/home/hakon/anaconda3/envs/perl_test/perl5/bin/cpanm
$ cpanm forks
--> Working on forks
Fetching http://www.cpan.org/authors/id/R/RY/RYBSKEJ/forks-0.36.tar.gz ... OK
Configuring forks-0.36 ... OK
==> Found dependencies: Devel::Symdump, Acme::Damn, Sys::SigAction, List::MoreUtils
--> Working on Devel::Symdump
Fetching http://www.cpan.org/authors/id/A/AN/ANDK/Devel-Symdump-2.18.tar.gz ... OK
Configuring Devel-Symdump-2.18 ... OK
Building and testing Devel-Symdump-2.18 ... OK
Successfully installed Devel-Symdump-2.18
--> Working on Acme::Damn
Fetching http://www.cpan.org/authors/id/I/IB/IBB/Acme-Damn-0.08.tar.gz ... OK
Configuring Acme-Damn-0.08 ... OK
==> Found dependencies: Test::Exception
--> Working on Test::Exception
Fetching http://www.cpan.org/authors/id/E/EX/EXODIST/Test-Exception-0.43.tar.gz ... OK
Configuring Test-Exception-0.43 ... OK
==> Found dependencies: Sub::Uplevel
--> Working on Sub::Uplevel
Fetching http://www.cpan.org/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-0.2800.tar.gz ... OK
Configuring Sub-Uplevel-0.2800 ... OK
Building and testing Sub-Uplevel-0.2800 ... OK
Successfully installed Sub-Uplevel-0.2800
Building and testing Test-Exception-0.43 ... OK
Successfully installed Test-Exception-0.43
Building and testing Acme-Damn-0.08 ... FAIL
! Installing Acme::Damn failed. See /home/hakon/.cpanm/work/1610661561.1411986/build.log for details. Retry with --force to force install it.
--> Working on Sys::SigAction
Fetching http://www.cpan.org/authors/id/L/LB/LBAXTER/Sys-SigAction-0.23.tar.gz ... OK
Configuring Sys-SigAction-0.23 ... OK
Building and testing Sys-SigAction-0.23 ... OK
Successfully installed Sys-SigAction-0.23
--> Working on List::MoreUtils
Fetching http://www.cpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-0.430.tar.gz ... OK
Configuring List-MoreUtils-0.430 ... OK
==> Found dependencies: Exporter::Tiny, Test::LeakTrace
--> Working on Exporter::Tiny
Fetching http://www.cpan.org/authors/id/T/TO/TOBYINK/Exporter-Tiny-1.002002.tar.gz ... OK
Configuring Exporter-Tiny-1.002002 ... OK
Building and testing Exporter-Tiny-1.002002 ... OK
Successfully installed Exporter-Tiny-1.002002
--> Working on Test::LeakTrace
Fetching http://www.cpan.org/authors/id/L/LE/LEEJO/Test-LeakTrace-0.17.tar.gz ... OK
Configuring Test-LeakTrace-0.17 ... OK
Building and testing Test-LeakTrace-0.17 ... FAIL
! Installing Test::LeakTrace failed. See /home/hakon/.cpanm/work/1610661561.1411986/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Module 'Test::LeakTrace' is not installed
! Bailing out the installation for List-MoreUtils-0.430.
! Installing the dependencies failed: Module 'List::MoreUtils' is not installed, Module 'Acme::Damn' is not installed
! Bailing out the installation for forks-0.36.
5 distributions installed

Так что это не удается. Если я попытаюсь установить неисправный модуль Acme::Damn вручную:

$ wget https://cpan.metacpan.org/authors/id/I/IB/IBB/Acme-Damn-0.08.tar.gz
$ tar zxvf Acme-Damn-0.08.tar.gz
$ cd Acme-Damn-0.08
$ perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Test::Exception 0 not found.
Generating a Unix-style Makefile
Writing Makefile for Acme::Damn
Writing MYMETA.yml and MYMETA.json
$ make
cp Damn.pm blib/lib/Acme/Damn.pm
Running Mkbootstrap for Damn ()
chmod 644 "Damn.bs"
"/home/hakon/anaconda3/envs/perl_test/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Damn.bs blib/arch/auto/Acme/Damn/Damn.bs 644
"/home/hakon/anaconda3/envs/perl_test/bin/perl" "/home/hakon/anaconda3/envs/perl_test/lib/5.26.2/ExtUtils/xsubpp"  -typemap '/home/hakon/anaconda3/envs/perl_test/lib/5.26.2/ExtUtils/typemap'  Damn.xs > Damn.xsc
mv Damn.xsc Damn.c
/tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc -c  -I. -D_REENTRANT -D_GNU_SOURCE --sysroot=/tmp/build/80754af9/perl_1527832170752/_build_env/x86_64-conda_cos6-linux-gnu/sysroot -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2   -DVERSION=\"0.08\" -DXS_VERSION=\"0.08\" -fPIC --sysroot=/tmp/build/80754af9/perl_1527832170752/_build_env/x86_64-conda_cos6-linux-gnu/sysroot "-I/home/hakon/anaconda3/envs/perl_test/lib/5.26.2/x86_64-linux-thread-multi/CORE"   Damn.c
/bin/sh: 1: /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc: not found
make: *** [Makefile:337: Damn.o] Error 127

Это показывает, что make пытается использовать несуществующий компилятор C:

 /tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc

Подсказку, почему это происходит, дают данные конфигурации Perl для cc:

$ perl -V | grep cc=./
    cc='/tmp/build/80754af9/perl_1527832170752/_build_env/bin/x86_64-conda_cos6-linux-gnu-gcc'

Я думаю, что когда perl пытается скомпилировать модуль XS, он использует тот же компилятор C, который использовался для компиляции perl. Но в этом случае этого компилятора больше не существует, поскольку conda установила (загрузила) предварительно скомпилированный Perl (поэтому переменная cc относится к компилятору на другой машине, машине, которая использовалась для компиляции perl)

Вероятно, это означает, что вы не можете (не должны) устанавливать модули XS со скачанным предварительно скомпилированным Perl. Я бы порекомендовал вместо этого собрать Perl из исходников на той же машине.

Изменить

Плохо, на самом деле можно установить тот же компилятор, который использовался для сборки Perl, выполнив:

$ conda install -c anaconda gcc_linux-64
$ which  x86_64-conda_cos6-linux-gnu-gcc
/home/hakon/anaconda3/envs/perl_test/bin/x86_64-conda_cos6-linux-gnu-gcc

Но я пока не могу заставить perl Makefile.PL использовать эту версию..

Изменить 2

Добавлен дополнительный вопрос.

Изменить 3

После применения исправления в дополнительном вопросе мне удалось установить модуль:

$ cpanm forks
--> Working on forks
Fetching http://www.cpan.org/authors/id/R/RY/RYBSKEJ/forks-0.36.tar.gz ... OK
Configuring forks-0.36 ... OK
==> Found dependencies: Acme::Damn, List::MoreUtils
--> Working on Acme::Damn
Fetching http://www.cpan.org/authors/id/I/IB/IBB/Acme-Damn-0.08.tar.gz ... OK
Configuring Acme-Damn-0.08 ... OK
Building and testing Acme-Damn-0.08 ... OK
Successfully installed Acme-Damn-0.08
--> Working on List::MoreUtils
Fetching http://www.cpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-0.430.tar.gz ... OK
Configuring List-MoreUtils-0.430 ... OK
==> Found dependencies: Test::LeakTrace
--> Working on Test::LeakTrace
Fetching http://www.cpan.org/authors/id/L/LE/LEEJO/Test-LeakTrace-0.17.tar.gz ... OK
Configuring Test-LeakTrace-0.17 ... OK
Building and testing Test-LeakTrace-0.17 ... OK
Successfully installed Test-LeakTrace-0.17
Building and testing List-MoreUtils-0.430 ... OK
Successfully installed List-MoreUtils-0.430
Building and testing forks-0.36 ... OK
Successfully installed forks-0.36
4 distributions installed
person Håkon Hægland    schedule 14.01.2021
comment
Спасибо, вы очень подходите @Håkon! Это самый четкий и исчерпывающий ответ, который я получил из Интернета. Наконец, я смог установить большинство модулей perl через cpanm в среду conda. Я также обнаружил, что если вашему модулю требуется один или несколько заголовков из какой-либо библиотеки C (например, PerlIO::gzip), вы можете установить эту библиотеку с помощью conda (conda install -c anaconda zlib) и добавить $CONDA_PREFIX/include к переменной ccflags из Config_heavy.pl -I/igatech/rd/dev/miniconda3/envs/test-perl/include. - person vid1998; 15.01.2021
comment
Другие модули продолжают давать сбой, потому что они не могут найти компилятор gcc (например: cpan install XML::Parser), и я не знаю, как это исправить. - person vid1998; 15.01.2021
comment
Привет, vid1998, да, ты установил libexpat-dev? См.: zoomadmin.com/HowToInstall/UbuntuPackage/libexpat-dev. - person Håkon Hægland; 15.01.2021
comment
Вы также можете установить его с помощью conda install -c conda-forge expat. Затем установите переменные среды: EXPATLIBPATH=$CONDA_PREFIX/lib и EXPATINCPATH=$CONDA_PREFIX/include. А затем перезапустите cpanm XML::Parser - person Håkon Hægland; 15.01.2021
comment
Спасибо за объяснение! Экспорт EXPATLIBPATH=$CONDA_PREFIX/lib and EXPATINCPATH=$CONDA_PREFIX/include приводит к простому пути к путям объявлений для сторонних библиотек и заголовков, установленных через conda, относительно ручного изменения Config_heavy.pl. В любом случае моя проблема с XML::Parser заключается в том, что на этот раз компилятор C не найден: Configuring XML-Parser-2.46 Running Makefile.PL Couldn't find your C compiler Compilation failed in require at Makefile.PL line 4. BEGIN failed--compilation aborted at Makefile.PL line 4. -> N/A -> FAIL Configure failed for XML-Parser-2.46. See - person vid1998; 18.01.2021
comment
Не удалось найти ваш компилятор C... Что выводит perl -MConfig -E 'say $Config{cc}' ?' - person Håkon Hægland; 18.01.2021
comment
Вывод: /igatech/rd/dev/miniconda3/envs/test-perl2/bin/x86_64-conda_cos6-linux-gnu-gcc кажется правильным - person vid1998; 18.01.2021
comment
/igatech/rd/dev/miniconda3/envs/test-perl2 совпадает с /igatech/rd/dev/miniconda3/envs/test-perl - person vid1998; 18.01.2021
comment
Сбой компиляции в строке 4 Makefile.PL: я вижу, что строка 4 — это вызов Devel::CheckLib, поэтому я подозреваю, что именно он является причиной ошибки. Можешь попробовать запустить: perl -MDevel::CheckLib -e1 ? - person Håkon Hægland; 18.01.2021
comment
Этот модуль не был найден в моей системе: perl -MDevel::CheckLib -e1 Can't locate Devel/CheckLib.pm in @INC (you may need to install the Devel::CheckLib module) (@INC contains:... - person vid1998; 18.01.2021
comment
Хм, это было странно. Очевидно, XML::Parser нуждается в этом (и загружает его в Makefile.PL). Что произойдет, если вы попытаетесь установить его? (cpanm Devel::CheckLib) - person Håkon Hægland; 18.01.2021
comment
был правильно установлен: cpanm Devel::CheckLib ... Building and testing Mock-Config-0.03 ... OK Successfully installed Mock-Config-0.03 Building and testing Devel-CheckLib-1.14 ... OK Successfully installed Devel-CheckLib-1.14 3 distributions installed В любом случае, если я повторю попытку с cpanm XML::Parser, я получу ту же ошибку, что и раньше. Разве установка Perl и Perl-модулей из двоичных файлов не является более прямой и безопасной, чем из conda? - person vid1998; 18.01.2021
comment
Давайте продолжим обсуждение в чате. - person Håkon Hægland; 18.01.2021