【问题标题】:Include NLTK in Google Cloud Function在 Google Cloud 函数中包含 NLTK
【发布时间】:2019-10-06 04:25:34
【问题描述】:

我正在尝试使用来自 Python 的 NLTK 库的词形还原和标记器部署一个谷歌云函数。 NLTK 需要使用 punct 和 wordnet 包下载

import nltk
nltk.download('punct')
nltk.download('wordnet')

因此这些不能在 requirements.txt 文件中指定。在requirement.txt中唯一可以提到的是nltk。

我确实浏览了this similar question,它把我带到了关于specifying dependencies in python 的谷歌文档页面,并按照那里的所有步骤进行操作。

首先我将整个虚拟环境的依赖项移动到一个名为 lib 的目录中

pip install -t lib nltk

然后我在 lib 目录中创建了 __init__.py 文件。并将我所有的导入语句更改为从 lib 导入。但是,当使用 lib 目录中的 nltk 包时,我经常会抛出错误,我认为这是由于相对路径造成的。

Traceback (most recent call last): File "main.py", line 1, in <module> from lib.nltk.stem import WordNetLemmatizer File "/Users/aakashpatel/Documents/resume-compare/lib/nltk/__init__.py", line 99, in <module> from nltk.internals import config_java ModuleNotFoundError: No module named 'nltk'

如果我在lib/nltk 文件夹的__init__.py 文件下查看,则有一条导入语句from nltk.internals import config_java 找不到,因为它必须转换为from lib.nltk.internals import config_java。而且我不能直接改变这一点,因为会有很多其他地方简单地提到导入,例如 from nltk 或其他东西。

我该如何解决这个问题?我没有遵循正确部署到 Google Cloud Function 的所有步骤吗?

【问题讨论】:

    标签: python google-cloud-platform google-cloud-functions nltk


    【解决方案1】:

    我想通了。

    您需要在 $PYTHONPATH 变量中添加 lib 目录的路径。你可以简单地写

    import sys
    sys.path.append('lib')
    

    但仅此一项并不能解决问题。 NLTK 下载保存在 nltk_data 目录中,因此必须将目录复制到 lib 文件夹或您的包的文件夹,然后将路径附加到 nlkt.data

    import sys
    sys.path.append('lib/')
    
    import lib.nltk as nltk
    nltk.data.path.append('lib/nltk_data/')
    

    因此,按照上述链接中描述的步骤,顶部的代码块应该可以解决 Google Cloud Function 中的 NLTK 问题。

    【讨论】:

      【解决方案2】:

      正如我提到的in this answer,实际上没有必要将 nltk 打包为本地依赖项——您只需在代码中包含数据文件,然后将 nltk.data.path 附加到 nltk_data 目录的路径即可。

      【讨论】:

        猜你喜欢
        • 2018-05-19
        • 1970-01-01
        • 2019-04-07
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-28
        相关资源
        最近更新 更多