在 setup.py 脚本中安装 nltk 数据依赖项

Posted

技术标签:

【中文标题】在 setup.py 脚本中安装 nltk 数据依赖项【英文标题】:Installing nltk data dependencies in setup.py script 【发布时间】:2015-01-04 03:57:47 【问题描述】:

我在我的项目中使用 NLTK 和 wordnet。我使用 pip 在我的 PC 上手动进行了安装: pip3 install nltk --user 在终端中,然后 nltk.download() 在 python shell 中下载 wordnet。

我想用setup.py 文件将这些自动化,但我不知道安装 wordnet 的好方法。

目前,我在调用setup 之后有这段代码("nltk"install_requires 调用setup 的列表中):

import sys
if 'install' in sys.argv:
    import nltk
    nltk.download("wordnet")

有没有更好的方法来做到这一点?

【问题讨论】:

@martin-thoma 快速浏览了一下,看起来 nltk data 依赖项可以打包为 Python 项目并在 PyPI 上分发而无需太多工作。整个事情可以相对容易地编写脚本并委托给 CI/CD 系统。你应该权衡这些票:github.com/nltk/nltk_data/issues/12github.com/nltk/nltk/issues/2228 @martin-thoma 还有,这是我写的关于 spacy 的相同问题的相当相似的帖子:***.com/questions/57773454/package-spacy-model/… 这也适用于您的情况吗? 对于我的用例,最好的选择似乎是在 requirements.txt 文件中列出所有依赖项并首先使用 pip install -r requirements.txt。然后在我的setup.py 中,我有手动下载命令nltk.download("punkt"),当我运行pip install -e . 时使用它我相信这是可行的,因为我正在构建一个Docker 映像/容器,而不是试图分发一个包。 【参考方案1】:

我设法在 setup.py 中安装了 NLTK 数据,方法是用我自己的 Install 类覆盖 cmdclass

from setuptools import setup, find_packages
from setuptools.command.install import install as _install


class Install(_install):
    def run(self):
        _install.do_egg_install(self)
        import nltk
        nltk.download("popular")

setup(...
    cmdclass='install': Install,
    ...
    install_requires=[
      'nltk',
      ],
    setup_requires=['nltk']
    ...
   )

在调用import nltk 之前,在run() 方法中使用do_egg_install() 方法来确保安装nltk 非常重要(另请参阅此处python setuptools install_requires is ignored when overriding cmdclass)。另外不要忘记将nltk 添加到setup_requires

【讨论】:

对我不起作用! 对我也不起作用【参考方案2】:

您还可以使用 shell 脚本自动安装,例如运行(在 pip 安装 nltk 之后):

python -m nltk.downloader -d /usr/share/nltk_data wordnet

【讨论】:

以上是关于在 setup.py 脚本中安装 nltk 数据依赖项的主要内容,如果未能解决你的问题,请参考以下文章

python setup.py 配置在自定义目录中安装文件

如何从 setup.py install_requires 列表中安装 PyTorch 和相关工具?

在PyCharm中安装nltk,以及nltk data的下载。

Python包安装脚本安装二进制可执行文件

下面给出了在 python 3.6.6 中安装 dlib 时出现的错误。我在 Windows 10 的 dlib 19.15 文件夹中使用命令“python setup.py install”。

在Mac OS X 10.13.2中安装nltk 和numpy