2014-11-05 2 views
0

Запуск UBUNTU 14.04 через VirtualBox.Модули CPAN претендуют на установку, но не

При выполнении сценария, я получаю следующее сообщение об ошибке:

Can't locate XML/Simple.pm in @INC (@INC contains:...

Теперь, когда я просматриваю каталоги в @INC, они действительно не содержат XML/Simple.pm

Затем я попытался установить его через CPAN

sudo cpan XML::Simple

и он говорит мне, что:

XML::Simple is up to date (2.20).

, который, согласно perl не соответствует действительности, так как выход из

perl -e "use XML::Simple "

является

Can't locate XML/Simple.pm in @INC (@INC contains:

Итак, что мне не хватает?

+1

Возможно, другой установленный Perl-бинарный с 'perlbrew'? Что возвращает 'per per''? В противном случае отправьте сценарий.Каждый скрипт может модифицировать @INC при запуске, поэтому может случиться, что он не найдет модуль. –

+0

Вы уверены, что устанавливаете модуль в гостевой системе virtualbox, а не в хосте? :) – ysth

+0

@SidBurn: какой perl возвращает "/home/qiime/perl5/perlbrew/perls/perl-5.16.0/bin/perl" – MLS

ответ

1

В общем, вы не должны путаться с системой perl.

Использование

$ which perl

и

$ sudo which perl

, чтобы увидеть, где каждый perl жизнь.

3

Альтернативный способ установки модулей Perl в системах Linux - из репозитория распространения. В системах Debian/Ubuntu общие правила для преобразования имени распределения CPAN меткого имени пакета:

  1. преобразовать имя модуля в нижний регистр
  2. новообращенный «::» к «-»
  3. добавить а 'Lib' префикс и '-perl суффикс

Так имя пакета для XML :: Simple будет: libxml-simple-perl и вы можете установить его с помощью:

sudo apt-get install libxml-simple-perl 

Есть исключения из этих правил, но вы всегда можете искать по Perl имя модуля:

apt-cache search XML::Simple 

Вы не получите абсолютную последнюю версию модуля из репозитория пакетов вашего дистрибутива, но для стабильной (некоторые из них могут например, «moribund»), такие как XML :: Simple, что обычно не имеет значения.

Если у вас есть несколько версий Perl установлен, а затем установить из репозитория пакетов вашего дистрибутива обычно только сделать пакет для системы Perl в /usr/bin

1

В качестве администратора или приложений разработчика системы есть общая проблема с которыми вы обычно сталкиваетесь.Когда вы разрабатываете приложение, вы, вероятно, всегда хотите новейшие и новейшие модули, а не модули, поставляемые с дистрибутивом. Но даже если у вас все в порядке с версиями в вашем 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 в вашем домашнем каталоге.

Смежные вопросы