Почему я не могу просто скопировать установленные модули Perl на другие машины? - PullRequest
5 голосов
/ 21 апреля 2010

Будучи очень новым для Perl, но не для динамических языков, я немного удивлен тем, насколько непростым является управление модулями.

Конечно, cpan X теоретически работает, но я работаю над одним и тем же проектом на трех разных машинах и ОС (на работе, дома, тестирование во внешней среде).

  • На работе (Windows 7) у меня проблема с использованием cpan из-за нашего брандмауэра, который делает ftp непригодным для использования
  • Дома (Mac OS X) работает
  • Во внешней среде (Linux CentO) он работал в нерабочее время, потому что у меня нет доступа с правами root, и мне пришлось настроить cpan для работы от имени пользователя без полномочий root
  • Я пробовал на другом сервере, к которому у меня есть доступ. Если предыдущей внешней средой является VPS, и поэтому у меня есть доступ к оболочке, то другим является дешевый общий хостинг, где у меня нет возможности установить новые модули, кроме предустановленных

В настоящее время я все еще не могу установить Шаблон под Windows. Я видел, что в качестве альтернативы я мог бы скомпилировать его, и я также попробовал PPM ActiveState, но там нет модуля.

Теперь, мое недоумение связано с тем, что Perl является динамическим языком. У меня были все эти проблемы во время работы, например, с C, где мне приходилось компилировать все библиотеки для всей платформы, но я думал, что с Perl подход был бы очень похож на Python или PHP, где в 90-х % случаев копирования модуля в каталог и его импорта просто работает.

Итак, мой вопрос: если модули Perl написаны на Perl, почему подход копировать / вставить не будет работать? Если некоторые (или некоторые части) модулей должны быть скомпилированы, как посмотреть в CPAN, является ли модуль только для Perl или он опирается на скомпилированные библиотеки? Разве нет способа загрузить модуль (tar, zip ...) и использовать cpan для его развертывания? Это решило бы мою проблему под Windows.

Ответы [ 2 ]

10 голосов
/ 21 апреля 2010

Теперь Perl - это динамический язык, но это не значит, что все, что пишут люди, переносимо на разные платформы. Это не вина языка. Это даже не ошибка программиста. Некоторые вещи, такие как Win32 :: OLE , не должны работать в Unix. :)

Другие динамические языки будут иметь такие же проблемы. Если вам нужно скомпилировать код на языке C, вы не сможете просто скопировать файлы на другой компьютер. Некоторые дистрибутивы настраивают код немного по-разному в зависимости от вашей операционной системы и т. Д.

Даже если вы можете копировать файлы, вы должны убедиться, что копируете все нужные вам файлы. Знаете ли вы все, что вам нужно для конкретного модуля? Помните, у многих из них есть зависимости.

Большинство проблем, которые у вас возникают, не имеют ничего общего с языком. У вас проблемы с инструментами. Если вам нужен CPAN-инструмент с нулевым разрешением, который принимает все решения за вас, попробуйте cpanminus . Это в основном то же самое, что вы получили бы из cpan (хотя это другой код), но он принимает все решения за вас. Он не запускает ни одного из тестов распространения и устанавливается в ваш пользовательский каталог. Когда вам нужно что-то, что дает вам контроль, вернитесь к cpan.

4 голосов
/ 21 апреля 2010

Во внешней среде (Linux CentO) он работал в нерабочее время, потому что у меня нет доступа с правами root, и мне пришлось настроить cpan для работы от имени пользователя без полномочий root

Это один из тех случаев, когда помогает узнать Трюк. В этом случае local :: lib , что позволяет настроить область установки без полномочий root и все переменные ENV примерно за три минуты.

если модули perl написаны на perl, почему метод копирования / прошивки не будет работать?

Некоторые написаны на чистом Perl, но многие написаны частично на C (с использованием Perl XS API) для эффективности.

Иногда вы сталкиваетесь с ситуациями, такими как JSON :: XS , JSON :: PP и JSON :: Any , чтобы автоматически выбрать лучший вариант, который установлен .

Нет ли способа загрузить модуль (tar, zip ...) и использовать cpan для его развертывания?

Программа cpan предназначена для получения информации из Интернета. Вы можете скачать пакет (в правой части страницы CPAN будет ссылка «Download: CGI.pm-3.49.tar.gz»), распаковать его, затем

perl Makefile.PL
make
make install

Возможно, вам лучше сконфигурировать вашу установку cpan для использования только источников HTTP (в опции конфигурации urllist). Возможно, даже до создадим мини-зеркало CPAN внутри вашей сети.

...