Невозможно установить расширение OpenFST Python - PullRequest
0 голосов
/ 25 июня 2018

Я пытался установить расширение OpenFST Python в соответствии с этим руководством.Было два варианта сделать это.
Первым вариантом было выдать --enable-python во время настройки OpenFst, что я попробовал и потерпел неудачу.
Поэтому я выбрал второй вариант.Я успешно установил OpenFST с этими командами:

./configure --enable-far
make
sudo make install

Затем я попытался установить пакет PyPi openfst с pip:
pip install openfst
и получил следующую ошибку:

Collecting openfst
  Using cached https://files.pythonhosted.org/packages/cc/6b/cc05392480e2232e176be895b9ca2b9f4a5f153f99ab276b37d440b3bace/openfst-1.6.6.tar.gz
Building wheels for collected packages: openfst
  Running setup.py bdist_wheel for openfst ... error
  Complete output from command /home/arif/anaconda3/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-7y6dl6o2/openfst/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-zadciiwk --python-tag cp36:
  running bdist_wheel
  running build
  running build_ext
  building 'pywrapfst' extension
  creating build
  creating build/temp.linux-x86_64-3.6
  gcc -pthread -B /home/arif/anaconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/arif/anaconda3/include/python3.6m -c pywrapfst.cc -o build/temp.linux-x86_64-3.6/pywrapfst.o -std=c++11 -Wno-unneeded-internal-declaration -Wno-unused-function
  cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
  pywrapfst.cc:557:40: fatal error: fst/extensions/far/getters.h: No such file or directory
  compilation terminated.
  error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Failed building wheel for openfst
  Running setup.py clean for openfst
Failed to build openfst
Installing collected packages: openfst
  Running setup.py install for openfst ... error
    Complete output from command /home/arif/anaconda3/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-7y6dl6o2/openfst/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-3niypfz6/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_ext
    building 'pywrapfst' extension
    creating build
    creating build/temp.linux-x86_64-3.6
    gcc -pthread -B /home/arif/anaconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/arif/anaconda3/include/python3.6m -c pywrapfst.cc -o build/temp.linux-x86_64-3.6/pywrapfst.o -std=c++11 -Wno-unneeded-internal-declaration -Wno-unused-function
    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
    pywrapfst.cc:557:40: fatal error: fst/extensions/far/getters.h: No such file or directory
    compilation terminated.
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/home/arif/anaconda3/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-7y6dl6o2/openfst/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-3niypfz6/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-7y6dl6o2/openfst/

Может кто-нибудь помочь мне решить эту проблему?

Я использую python 3.6 (anaconda) и OpenFST-1.5.4 в Linux Mint 18.3.

1 Ответ

0 голосов
/ 25 июня 2018

Здесь есть две проблемы.


Во-первых, насколько я могу судить, несмотря на то, что документально подтверждено, метод pip install действительно не поддерживается и даже не должен работать.Кайл Горман (который, я полагаю, является одним из основных авторов) прокомментировал несколько веток форума с такими ответами:

«Использование pip для этого не имеет особого смысла, иэто в любом случае устарело. "

" Нет причин вызывать pip. Версия там несовместима с произвольными версиями OpenFst. Если вы делаете --enable-python, то make иmake install, вы уже установили pywrapfst для любой версии OpenFst, которую вы собираете. "


Во-вторых, несмотря на то, что он работает с" любым Python 2.7 или более поздней ",на самом деле он работает только только с Python 2.7:

"Перед отправкой вы можете протестировать Python 3 с расширением Python. Мы все еще разрабатываем для Python 2.7 исключительно, к сожалению, и этоне тестировался на Python 3. "

И, собственно, именно поэтому ваша попытка использовать --enable-python не удалась:

checking for a version of Python >= '2.1.0'...   File "<string>", line 1
    import sys, string;         ver = string.split(sys.version)[0];     print ver >= '2.1.0'
                                                                        ^
SyntaxError: invalid syntax
no

Их тест autoconf для Python2.1 или позже это мыЭтот синтаксис недопустим в Python 3. И он не очень хорошо обрабатывает ошибки, поэтому требуется, чтобы SyntaxError означал, что ваш Python версии 2.0 или более ранней, и поэтому он прерывает настройку.


Если вы посмотрите дальше в том же потоке, пользователь NurL написал:

После множества изменений в файле конфигурации и Makefile мне удалось успешно установить расширение Python для Python 3.Смотрите этот Dockerfile: https://gist.github.com/0xnurl/6f97eb39409ea48db31fe315fd1e208f

Я, очевидно, не могу поручиться за то, работает ли это.

И, если вы не используете точно ту же цель, что и NurL, вам придется прочитать эту гигантскую командную строку RUN wget, разбить ее на шаги и выполнить эквивалентные шаги самостоятельно.

И могут быть проблемы, с которыми NurL не столкнулся, с которыми вы столкнетесь.(Я бы настоятельно рекомендовал по крайней мере запустить 2to3 в полученном коде до или после установки, чтобы убедиться, что он ничего не находит.)

Но это так близко, как вы, вероятно, доберетесь дочто-то, что работает из коробки, учитывая, что то, что вы пытаетесь сделать, не поддерживается.Если вы не можете заставить его работать на себя оттуда, вы, вероятно, просто не сможете использовать эту библиотеку.

...