Как я решил эту проблему, добавил загрузку пакетов nltk в функцию init
import logging
import nltk
from nltk import word_tokenize, pos_tag
LOGGER = logging.getLogger(__name__)
LOGGER.info('Catching broad nltk errors')
DOWNLOAD_DIR = '/usr/lib/nltk_data'
LOGGER.info(f'Saving files to {DOWNLOAD_DIR} ')
try:
tokenized = word_tokenize('x')
LOGGER.info(f'Tokenized word: {tokenized}')
except Exception as err:
LOGGER.info(f'NLTK dependencies not downloaded: {err}')
try:
nltk.download('punkt', download_dir=DOWNLOAD_DIR)
except Exception as e:
LOGGER.info(f'Error occurred while downloading file: {e}')
try:
tagged_word = pos_tag(['x'])
LOGGER.info(f'Tagged word: {tagged_word}')
except Exception as err:
LOGGER.info(f'NLTK dependencies not downloaded: {err}')
try:
nltk.download('averaged_perceptron_tagger', download_dir=DOWNLOAD_DIR)
except Exception as e:
LOGGER.info(f'Error occurred while downloading file: {e}')
Я понимаю, что количество выражений try catch не требуется. Я также указываю каталог для загрузки, потому что кажется, что если вы этого не сделаете, он загружает и распаковывает 'tagger' в / usr / lib, а nltk не ищет там файлы.
Это будет загружать файлы при каждом первом запуске на новом модуле, и файлы будут сохраняться до тех пор, пока модуль не умрет.
Ошибка была устранена на множестве состояний без Kubernetes, что означает, что это может иметь дело с непостоянными приложениями, такими как App Engine, но не будет наиболее эффективным, потому что его нужно будет загружать каждый раз, когда экземпляр запускается.