Установка зависимостей данных nltk в сценарии setup.py

Я использую NLTK с Wordnet в моем проекте. Я выполнил установку вручную на моем компьютере, pip3 install nltk --user pip: pip3 install nltk --user в терминал, затем nltk.download() в оболочке python для загрузки wordnet.

Я хочу автоматизировать их с помощью файла setup.py, но я не знаю хорошего способа установки wordnet.

На данный момент у меня есть этот кусок кода после вызова setup ("nltk" находится в списке install_requires вызова setup):

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

Есть лучший способ сделать это?

Ответ 1

Мне удалось установить данные NLTK в setup.py, переопределив cmdclass моим собственным классом Install:

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']
    ...
   )

Важно использовать метод do_egg_install() в вашем методе run(), чтобы убедиться, что nltk установлен, до вызова import nltk (см. также здесь python setuptools install_requires is игнорируется при переопределении cmdclass). Также не забудьте добавить nltk в setup_requires.

Ответ 2

Вы также можете автоматизировать установку с помощью оболочки script, например, запуск (после установки pil nltk):

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