在 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 数据依赖项的主要内容,如果未能解决你的问题,请参考以下文章
如何从 setup.py install_requires 列表中安装 PyTorch 和相关工具?
在PyCharm中安装nltk,以及nltk data的下载。
下面给出了在 python 3.6.6 中安装 dlib 时出现的错误。我在 Windows 10 的 dlib 19.15 文件夹中使用命令“python setup.py install”。