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

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

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

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

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

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

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

5
задан brian d foy 19 February 2016 в 18:01
поделиться

2 ответа

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

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

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

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

10
ответ дан 18 December 2019 в 13:12
поделиться

Во внешней среде (Linux CentOs) он работал в нерабочее время, потому что у меня нет корневого доступа, и мне пришлось настроить 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 внутри вашей сети.

4
ответ дан 18 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: