В качестве администратора или приложений разработчика системы есть общая проблема с которыми вы обычно сталкиваетесь.Когда вы разрабатываете приложение, вы, вероятно, всегда хотите новейшие и новейшие модули, а не модули, поставляемые с дистрибутивом. Но даже если у вас все в порядке с версиями в вашем Linux-дистрибутиве, иногда возникает проблема, что вам нужен конкретный модуль Perl, и он не включен в ваш дистрибутив.
Условно-доступный способ решить эту проблему был всего лишь вызовом, чтобы сказать cpan XML::Simple
, и последний модуль загружается и устанавливается.
Но когда вы это делаете, вы возитесь с системой пакетов вашего дистрибутива Linux. Допустим, у вас уже был установлен XML :: Simple из вашей пакетной системы. Теперь ваша команда cpan обновит уже установленную версию и заменит ее более новой версией. Все это прекрасно, пока ваш дистрибутив Linux, например, не отправит обновление для libxml-simple-perl
. Что может произойти, так это то, что ваша новая версия возвращается к старой версии.
И поскольку все модули Perl обычно зависят от других модулей Perl, команда установки также может обновлять множество других модулей Perl.
Все это поведение может привести к ошибкам, связанным с прошивкой. В любом случае в приложении вы пишете, а также в приложении, отправленном в вашем дистрибутиве.
Чтобы решить эту проблему, обычно лучше всего оставить систему Perl полностью самостоятельно. Скомпилируйте свою собственную Perl-версию полностью из источника. Эта версия Perl отличается тем, что имеет собственные библиотеки perl, которые вы можете установить непосредственно из CPAN, не входя в системный Perl.
Теперь, чтобы сделать это очень легко, их существует инструмент под названием Perlbrew
С помощью этого инструмента вы можете легко установить любой Perl версии. Например, просто введите perlbrew install perl-5.16.0
и полностью установите Perl 5.16.0 в свой домашний каталог! Он также настраивает все пути, поэтому вызов perl
в вашей системе разрешает эту установку на perlbrew.
Также важной частью является то, что эта установка на Perl находится только в вашем домашнем каталоге под обычной учетной записью пользователя. Вам не нужно sudo
или корневую учетную запись, поскольку Perl устанавливается в вашем домашнем каталоге.
То же самое касается модулей Perl. Если вы хотите установить Perl-модуль в свою установку на Perlbrew, вы просто вводите cpan XML::Simple
(или cpanm XML::Simple
checkout App::cpanminus
).
Теперь важная часть. В вашей системе у вас уже была настройка для Perlbrew. Когда вы выполнили свою программу установки, была использована установка Perlbrew. Но в этой установке Perlbrew не было установлен XML :: Simple.
Затем вы выполнили sudo cpan XML::Simple
для установки XML :: Simple. Проблема в том, что все команды sudo
просто исполняются как пользователь root. Это означает, что ваша система Perl /usr/bin/perl
используется вместо вашей установки в Perlbrew в /home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl
Вы успешно установите XML :: Simple в своем системном Perl. Но у вашей установки Perlbrew не было установлен XML :: Simple, и, таким образом, она по-прежнему возвращала ошибку, которая не могла найти XMl :: Simple.
Единственное, что вам действительно нужно было сделать: cpan XML::Simple
установка XML :: Простой в установке perlbrew в вашем домашнем каталоге.
Возможно, другой установленный Perl-бинарный с 'perlbrew'? Что возвращает 'per per''? В противном случае отправьте сценарий.Каждый скрипт может модифицировать @INC при запуске, поэтому может случиться, что он не найдет модуль. –
Вы уверены, что устанавливаете модуль в гостевой системе virtualbox, а не в хосте? :) – ysth
@SidBurn: какой perl возвращает "/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl" – MLS