麻烦在python 2.7中安装spaCy英文模型?并将python升级到3.5?

时间:2016-06-08 17:28:37

标签: python python-2.7 python-3.x nlp spacy

我正在尝试在安装程序后在我的mac上安装spaCy英语模型。现在我的机器有python 2.7。我已经在venv中安装了spaCy,然后使用" python -m spacy.en.download"按照网站上的说明安装模型。当我尝试这样做时,我得到以下回应:

$ python -m spacy.en.download

追踪(最近一次呼叫最后一次):

  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

然后我尝试在我不想做的venv之外的计算机上安装spaCy和模型,但想看看它是否可行。我又得到了同样的错误。

此外,我想知道这个问题是否与运行python 2.7有关?我将计算机上的python升级到3.5但不确定如何用3.5替换2.7?现在,我可以使用$ python$ python3在解释器上运行。如何将所有内容升级到3.5?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

简而言之:

最新版本的spacyplac不再存在此问题。

升级spacy版本,它也应自动升级plac

pip install -U spacy

长期:

spacy的最新版本中,import plac行不再在spacy.en.download.py中,而在plac library is used in other places

plac是一个参数解析器,如原生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

您上面发生的错误是由Python2和Python3的print_function语法之间的差异引起的,即:

alvas@ubi:~$ 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()
alvas@ubi:~$ 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引入的。

由于https://github.com/micheles/plac/blob/46d8d393fbca8820e5cba5d1da808b65a1c879a3/plac_tk.py#L1

处有from __future__ import print_function

print_function应该已经启动并允许Python2打印中的file=参数,例如

alvas@ubi:~$ 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__的{​​{1}}导入并未启动,这对我来说仍然是个谜=(但那是另一个问题的另一个答案......)