我正在尝试在安装程序后在我的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?
提前谢谢!
答案 0 :(得分:0)
简而言之:
最新版本的spacy
和plac
不再存在此问题。
升级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}}导入并未启动,这对我来说仍然是个谜=(但那是另一个问题的另一个答案......)