2016-06-08 3 views
2

Я пытаюсь установить английскую модель spaCy на моем mac после установки программы. Прямо сейчас моя машина имеет python 2.7. Я установил spaCy в venv, а затем выполнил команду «python -m spacy.en.download», чтобы установить модель, как указано на веб-сайте. Когда я пытаюсь сделать это я получаю следующее в ответ:Неисправность Установка spaCy английской модели в python 2.7? И обновление python до 3.5?

 
$ python -m spacy.en.download 

Traceback (самый последний вызов последнего):

 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/spacy/en/download.py", line 1, in 
    import plac 
    File "/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/plac.py", line 38, in 
    from plac_tk import TkMonitor 
    File "/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/plac_tk.py", line 46 
    print('Process %d killed by CTRL-C' % os.getpid(), file=sys.stderr) 
                 ^
SyntaxError: invalid syntax 

Затем я попытался установить Spacy и модель на моем компьютере за пределами который я бы предпочел не делать, но хотел посмотреть, будет ли это работать. Снова я получил ту же ошибку.

Кроме того, мне интересно, имеет ли проблема что-то делать с запуском python 2.7? Я обновил свой python на своем компьютере до 3.5, но не уверен, как заменить 2.7 на 3.5? Прямо сейчас я могу работать как на интерпретаторе, используя $ python, так и $ python3. Как я могу обновить все до 3,5?

Спасибо заранее!

+1

Похоже TKMonitor имеет Python 3 .x в их 2.7. Я просто столкнулся с этой ошибкой. Я закончил модификацию локального файла, чтобы просто сказать 'print >> sys.stderr, 'Process% d, убитый CTRL-C'% os.getpid() 'на данный момент, чтобы заставить его работать, но я не могу выталкивать код где-либо, потому что загруженный один разрывается –

+1

Похоже, они исправили его, изменили ваш plac на 0.9.4 в requirements.txt –

ответ

0

Короче:

Последняя версия spacy и plac не имеет этой проблемы больше.

Обновите версию spacy, она должна автоматически обновить plac тоже:

pip install -U spacy 

При продолжительном:

В последней версии spacy, то import plac линия уже не в spacy.en.download.py но plac library is used in other places

plac - анализатор аргументов l ike родной argparse или популярный docopt.

File "/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/plac_tk.py", line 46 
    print('Process %d killed by CTRL-C' % os.getpid(), file=sys.stderr) 
                 ^
SyntaxError: invalid syntax 

Ошибка вы произошла выше вызвано различием между print_function синтаксиса python2 и Python3, т.е .:

[email protected]:~$ python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> print('foo bar', file=sys.stderr) 
    File "<stdin>", line 1 
    print('foo bar', file=sys.stderr) 
         ^
SyntaxError: invalid syntax 
>>> exit() 
[email protected]:~$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> print('foo bar', file=sys.stderr) 
foo bar 

И это было введено этим commit.

Поскольку существует from __future__ import print_function на https://github.com/micheles/plac/blob/46d8d393fbca8820e5cba5d1da808b65a1c879a3/plac_tk.py#L1

print_function должен ногами, и позволить file= параметры печати для python2, например,

[email protected]:~$ python2 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from __future__ import print_function 
>>> import sys 
>>> print('foo bar', file=sys.stderr) 
foo bar 

Но __future__ импорт из plac не удар и что остается для меня загадкой = (Но это еще один ответ на другой вопрос, в другое время ...

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