Как я могу создать портативный жемчуг, когда я не могу установить модули на целевом узле?

Просто вы определили «phrasedocs» внутри функции, которая не видна снаружи, и возвращение функции должно быть зафиксировано в переменной, отредактируйте ваш код:

dirPath = 'C:/Users/J/kagglemoviereviews/corpus'
phrasedata = processkaggle(dirPath, 5000) # returns 'phrasedata'
phraselist = random_phrase(phrasedata) # returns 'phraselist'
phrasedocs = word_token(phraselist) # returns 'phrasedocs'
phrasedocs2 = process_token(phrasedocs) # returns phrasedocs2
12
задан Community 23 May 2017 в 10:29
поделиться

7 ответов

В этом случае я рассмотрел бы поставку законченного приложения вместе с его собственным Perl. Вы добираетесь для выбора любой версии, которую Вы любите и любые модули, которые Вы любите. Скомпилируйте все, организуйте все в каталог, затем смолите результат. Для развертывания скопируйте файл и untar. Используйте совет, который другие уже отметили о путях поиска библиотеки и т.д. В сущности Ваше приложение получает свой собственный стек.

Теперь, прием там является кросс-компиляцией. Почему Вы разрабатываете на Cygwin? Это - цель также? Существует ли причина, у Вас нет HP/UX или машины разработки Соляриса? Какая архитектура Вы предназначение (RISC, SPARC, Intel, и т.д.). Если Вы не можете заставить аппаратные средства выполнять их, получать некоторые виртуальные машины для Ваших целей и разрабатывать там.

Кроме этого, можно установить модули где угодно, у Вас есть полномочия. См. perlfaq8:

12
ответ дан 2 December 2019 в 05:56
поделиться

Я не попробовал эту конкретную функцию, но perl2exe говорит, что поддерживает кросс-платформенные сборки.

3
ответ дан 2 December 2019 в 05:56
поделиться

При компиляции сценария Perl со всеми его зависимостями от Windows с Cygwin и выполнении его Солярис просто не собирается работать.

Теперь вопрос: у Вас есть доступ к компилятору на том компьютере Соляриса? Именно, не потому что у Вас нет корневого доступа, Вы не можете скомпилировать и установить модули Perl в своем корневом каталоге при помощи:

perl Makefile.PL PREFIX=$HOME

Если Вы имеете CPAN в наличии в своей системе Соляриса, можно установить префикс в оболочке CPAN этот путь:

  1. запустите оболочку perl -MCPAN -e shell;
  2. измените префикс с conf makepl_arg PREFIX=/path/to/your/home/directory

Чтобы Ваш сценарий работал, можно или запустить жемчуг с -I $HOME переключатель командной строки, например:

perl -I $HOME script.pl

Ваша другая опция состояла бы в том, чтобы поместить это в начале Вашего сценария

use lib $ENV{'HOME'};
3
ответ дан 2 December 2019 в 05:56
поделиться

Если у Вас есть компилятор в каждой из Ваших систем (и некоторые другие инструменты, необходимые, настраивают как grep), необходимо не только смочь скомпилировать модули, но необходимо также смочь создать собственные исполняемые файлы жемчуга.

2
ответ дан 2 December 2019 в 05:56
поделиться

Установите свою переменную среды PERLLIB к Вашему персональному каталогу lib Perl или использованию-I переключатель командной строки к Perl для указания на это.

Если у Вас есть доступ к машине HP-UX, можно скомпилировать, Ожидают там и устанавливают его в каталоге. Но кросс-компиляция от Windows до HP-UX является, вероятно, намного более трудной. Необходимо было бы создать кросс-компилятор GCC.

2
ответ дан 2 December 2019 в 05:56
поделиться

Вы захотите local::lib. После того как Вы сделали это, чистые модули Perl должны работать кросс-платформенные, но необходимо будет определить и переустановить скомпилированные модули на внешней платформе. Сделайте начальная установка на реальном Unix, cpan на cygwin является медленной.

2
ответ дан 2 December 2019 в 05:56
поделиться

Я несколько раз натыкался на это в моих системах работы. У нас есть основная установка Perl 5.8, и у меня нет способности добавить модули. Вот решение, которое я использую:

  1. Создайте папку, названную 'lib' в Вашем корне проекта (исключая: ~/projects/MyProject/lib)
  2. Любые модули, которые Вы загружаете с CPAN, должны иметь Make-файл, а также каталог, названный "lib". Скопируйте содержание папки lib в Вашу недавно созданную папку lib. Некоторые модули могут только содержать единственный .pm файл и никакую структуру lib. Просто скопируйте .pm файл.

Ваш код должен сделать следующее: во-первых, используйте любые модули, которые обычно устанавливались, затем не смещают Вашу @INC переменную среды для пользований местными библиотеками:

# Declare Includes --------------------------------------------------------------------------------
use Getopt::Long;
use vars qw($VERSION);
use DirHandle;
use FileHandle;


# Force perl to use our local 'lib' directory for imported modules, this allows us to
# use modules without having to install them in th emain perl assembly. However, this
#also prevents these modules from being used in other projects.
BEGIN { unshift @INC, "lib"; }
use Error qw(:try);
use SOAP::Transport::HTTP;
#use LWP::Protocol::https;
use XML::Simple;
use XML::Writer;
use XML::Writer::String;

Протест к этому методу состоит в том, что некоторые модули Perl не используют метод 'lib' или имеют дополнительные зависимости. Если Вы сталкиваетесь с проблемами, исследуете Make-файл. МН для модуля и видят то, что он делает.

2
ответ дан 2 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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