2

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

$ python -m spacy.en.download

回溯(最近一次通话最后):

  _run_module_as_main 中的文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py”,第 162 行
    "__main__", fname, 加载器, pkg_name)
  _run_code 中的文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py”,第 72 行
    run_globals 中的执行代码
  文件“/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/spacy/en/download.py”,第 1 行,在
    进口广场
  文件“/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/plac.py”,第 38 行,在
    从 plac_tk 导入 TkMonitor
  文件“/Users/katietemrowsky/Documents/Desktop/machine/.env/lib/python2.7/site-packages/plac_tk.py”,第 46 行
    print('进程 %d 被 CTRL-C 杀死' % os.getpid(), file=sys.stderr)
                                                           ^
SyntaxError:无效的语法

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

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

先感谢您!

4

1 回答 1

1

简而言之:

最新版本的spacyandplac不再有这个问题了。

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

pip install -U spacy

长篇:

在最新版本中spacy,该import plac行不再在 中,spacy.en.download.py但该plac库在其他地方使用

plac是一个参数解析器,如 nativeargparse或 popular 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_functionPython2和Python3的语法不同造成的,即:

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

这是由 this commit引入的。

由于from __future__ import print_functionhttps://github.com/micheles/plac/blob/46d8d393fbca8820e5cba5d1da808b65a1c879a3/plac_tk.py#L1

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__从没有开始导入,plac这对我来说仍然是个谜=(但这是另一个问题的另一个答案......

于 2017-05-20T13:24:39.390 回答