我是 ansible 新手,但我正在尝试通过 ansible 剧本在 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 功能来实现我的目标的其他方法,有什么建议吗?
<小时/>更新:
为了更清楚一点,我正在尝试运行一个可以在 ansible playbook 中的 sell 之外的 python shell 中正常工作的命令。
例如,nltk.download("book")
行的工作原理与我在 python 终端中需要的完全一样。但我需要在不手动输入终端并通过 ansible playbook 中的任务的情况下运行它。
我尝试过类似的方法,虽然它可以编译,但它实际上并没有按照我的需要下载图书语料库。
- name: Get the "book" nltk corpus
shell: "/usr/local/venv/bin/python -m nltk.downloader book"
最佳答案
Documentation和 source code提示您可以下载各个模块:
Individual packages can be downloaded by calling the download() function with a single argument, giving the package identifier for the package that should be downloaded
如果 book
是您示例中的一个包(我不熟悉 NLTK),请尝试:
- name: Get the nltk corpus
shell: "python -m nltk.downloader book"
关于python - 通过ansible playbook在python终端中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386319/