python - 在 Google Cloud 函数中包含 NLTK
问题描述
我正在尝试使用来自 Python 的 NLTK 库的词形还原和标记器部署谷歌云功能。NLTK 需要使用 punct 和 wordnet 包下载
import nltk
nltk.download('punct')
nltk.download('wordnet')
因此这些不能在 requirements.txt 文件中指定。在requirement.txt中唯一可以提到的是nltk。
我确实查看了这个类似的问题,该问题引导我进入关于在 python 中指定依赖项的谷歌文档页面,并按照那里的所有步骤进行操作。
首先,我将整个虚拟环境的依赖项移动到一个名为 lib 的目录中
pip install -t lib nltk
然后我在__init__.py
lib 目录中创建了文件。并将我所有的导入语句更改为从 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
. 而且我不能继续改变这一件事,因为会有很多其他地方简单地提到导入,例如从 nltk 或其他东西。
我该如何解决这个问题?我是否没有遵循正确部署到 Google Cloud Function 的所有步骤?
解决方案
我想到了。
您需要在$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 问题。
推荐阅读
- php - 使用 pdo sqlsrv 驱动程序调用 mssql 存储过程,并在过程中进行多查询
- javascript - 尝试在命令行中运行时,javascript 程序的输出为“未定义”
- python - 如何遍历python中的无序对
- swift - Rxswift 在 UITableView 中的 UISearchBar
- android - 编辑文本上的上下文菜单的 Android 辅助功能
- flutter - Flutter GridView 不滚动
- flume - 如何计算合适的通道容量?
- c# - 理解列表:语法和传递参数
- angular - 角度:如何更改导入组件的类以更改颜色?
- google-cloud-platform - BigtableIO 如何实现只写一次?