我正在打包一个使用nltk的项目。当您使用pip安装nltk时,您将获得核心功能,但不是所有随附的模块。要获取这些模块,请调用nltk的下载方法。
我尝试了以下内容,但它不起作用,说ImportError: No module named nltk
。我假设发生了这种情况,因为在通过调用setup(...)
安装nltk之前发生了import nltk。
是否有一种干净的方法,使用distribute执行安装后步骤,执行以下操作之一?
$ python -m nltk.downloader punkt
>>> import nltk; nltk.download('punkt')
这是我在setup.py
尝试的失败:
class my_install(install):
def run(self):
install.run(self)
import nltk
nltk.download('punkt')
setup(
...
install_requires = [..., 'nltk==2.0.4'],
cmdclass={'install': my_install},
)
答案 0 :(得分:0)
pip不处理依赖关系,因此您需要编写README文件并向用户解释他们需要安装的内容,或者在您需要的所有内容上运行pip install的脚本。
第二种方式是我认为的方式,以及解释发生了什么的README文件。
作为一个debian维护者,我可以告诉你,做一个下载东西的安装命令在那里被认为是不可接受的,它必须打包列出依赖关系到其他包然后安装你的,如果依赖性满足,我认为这是一种理智的方式。 http://wiki.debian.org/UpstreamGuide#No_Downloads
答案 1 :(得分:0)
我使用命令行安装方法并且成功了。 像这样...
import subprocess
class my_install(install):
def run(self):
install.run(self)
cmd = ["python", "-m", "nltk.downloader", "punkt"]
with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
print(proc.stdout.read())