我是ansible的新手,但是我试图通过一个ansible playbook在python终端内运行一些命令。具体来说,我想下载一个语料库。
$python
>import nltk
>nltk.download
> ~ d (download)
> ~ book
> ~ q (quit)
>quit()
目前,我的playbook文件创建了一个virtualenv,可以通过requirements.txt
安装nltk,但我不知道如何获取特定的nltk功能而无需手动下载。
我在我的搜索中遇到了这一行python -m nltk.downloader all
,它满足了我的程序,但它下载了许多不必要的东西,占用了内存。但是,与此同时,我确实通过运行来试试:
- name: Get the nltk corpus
shell: "python -m nltk.downloader all"
但这与错误有关:
TASK [Get the nltk corpus]*****************************************************
fatal: [127.0.0.1]: FAILED! => {"changed": true, "cmd": "python -m nltk.downloader book", "delta": "0:00:00.016227", "end": "2016-12-29 20:06:09.156953", "failed": true, "rc": 1, "start": "2016-12-29 20:06:09.140726", "stderr": "/usr/bin/python: No module named nltk", "stdout": "", "stdout_lines": [], "warnings": []}
有没有关于如何使上述代码工作的建议,或者通过ansible获取特定nltk功能来实现我的目标的其他方法?
更新:
为了更清楚一点,我试图运行一个命令,该命令可以在一个安全的剧本中出售的python shell中正常工作。
例如,行nltk.download("book")
完全按照我的需要在python终端内工作。但是我需要在没有手动进入终端并通过ansible playbook中的任务的情况下运行它。
我尝试过与此类似的内容,虽然它编译了,但实际上并没有按照我的需要下载图书语料库。
- name: Get the "book" nltk corpus
shell: "/usr/local/venv/bin/python -m nltk.downloader book"
答案 0 :(得分:2)
Documentation和source code提示您可以下载单个模块:
可以通过使用单个参数调用download()函数来下载单个包,并提供应下载的包的包标识符
如果book
是您示例中的包(我不熟悉NLTK),请尝试:
- name: Get the nltk corpus
shell: "python -m nltk.downloader book"
答案 1 :(得分:1)
命令nltk.download()
用于下载nltk 数据:corpora和经过训练的模型,用于POS标记器之类的东西。要使用它,您必须已经安装了nltk代码,即您必须能够成功运行import nltk
。您说您使用nltk
模块运行virtualenv,但您的错误消息另有说明:/usr/bin/python: No module named nltk
。如果这是真正的问题,您首先需要对其进行排序(和/或更正您的问题)。
假设您可以启动Python以使import nltk
语句成功,您可以使用例如nltk.import("brown")
为布朗语料库下载语料库(您声明的目标)。 (当然这必须在import nltk
之后运行。)要下载NLTK书中提到的所有资源,请使用nltk.import("book")
。