在 AWS Lambda 中找不到 NLTK 模块
NLTK module not found in AWS Lambda
我已经成功安装了一个名为 pronounceable 的软件包,用于 Lambda 函数。
然而,似乎 NLTK 语料库 cmudict
是一个无法定位的依赖项。
这意味着使用命令 import pronounceable
会导致以下错误。
> Resource [93mcmudict[0m not found. Please use the NLTK Downloader
> to obtain the resource:
>
> [31m>>> import nltk
> >>> nltk.download('cmudict') [0m For more information see: https://www.nltk.org/data.html
>
> Attempted to load [93mcorpora/cmudict[0m
>
> Searched in:
> - './nltk_data'
> - '/home/sbx_user1051/nltk_data'
> - '/var/lang/nltk_data'
> - '/var/lang/share/nltk_data'
> - '/var/lang/lib/nltk_data'
> - '/usr/share/nltk_data'
> - '/usr/local/share/nltk_data'
> - '/usr/lib/nltk_data'
> - '/usr/local/lib/nltk_data'
我尝试了什么
1. 这是我用来安装包的代码,方法是创建一个层以应用于我的 Lambda 函数。
# STEP 1
mkdir folder
cd folder
virtualenv v-env
source ./v-env/bin/activate
pip install pronounceable
deactivate
# STEP 2
mkdir python
cd python
cp -r ../v-env/lib64/python3.6/dist-packages/* .
cd ..
zip -r pronounceable_layer.zip python
aws lambda publish-layer-version --layer-name pronounceable --zip-file fileb://panda_layer.zip --compatible-runtimes python3.6
然后我简单地选择了结果层并将其添加到 Lambda 函数中。
然后,根据 ,我将 cmudict
的内容(我已手动下载到我的本地计算机)放入 Lambda 根文件夹中名为 nltk_data
的文件夹内的文本文件中.
我还尝试通过添加带有 key/value NLTK_DATA
和 ./nltk_data
的环境变量来缓解此问题,并在函数顶部添加 nltk.download('cmudict', download_dir="/var/task/nltk_data")
,但无济于事。
2. 我还使用 Cloud9 打开 NLTK 文件 data.py
并根据此 修改路径,因为怀疑 nltk.data.path.append()
没有工作。
3. 我也按照这个手动设置下载路径到nltk.download('cmudict', download_dir='/tmp/')
,但是这似乎也不起作用。
我不知道接下来需要做什么。
问题
我需要做什么来确保 cmudict
可供 nltk 在我的 Lambda 函数中使用?
已解决
发布答案以防遇到类似问题的人有所帮助。
我通过再次查看表明无法找到语料库文件 cmudict
的错误消息解决了这个问题。
该文件的预期完整路径如下:
/var/task/nltk_data/corpora/cmudict/cmudict
也就是说,文件cmudict
需要放在一个名为cmudict
的文件夹中,这个文件夹需要放在corpora
里面,这个文件夹需要放在nltk_data
.
这可以通过在以下任一方式中创建路径来实现:
在 Lambda 控制台中手动(右键单击创建 folder/file 并将语料库内容粘贴到编辑器中)
通过在本地计算机上创建文件结构 nltk_data/corpora/cmudict/cmudict
,压缩文件并将 zip 文件上传到 Lambda 编辑器。
注意 - 您可能还需要修改 lambda 代码以反映语料库的预期路径,如下所示:
import nltk
from nltk.corpus import cmudict
nltk.data.path.append("/var/task/nltk_data")
您可能还希望设置环境变量并修改文件 data.py
,如上面链接的答案中所述。
我已经成功安装了一个名为 pronounceable 的软件包,用于 Lambda 函数。
然而,似乎 NLTK 语料库 cmudict
是一个无法定位的依赖项。
这意味着使用命令 import pronounceable
会导致以下错误。
> Resource [93mcmudict[0m not found. Please use the NLTK Downloader
> to obtain the resource:
>
> [31m>>> import nltk
> >>> nltk.download('cmudict') [0m For more information see: https://www.nltk.org/data.html
>
> Attempted to load [93mcorpora/cmudict[0m
>
> Searched in:
> - './nltk_data'
> - '/home/sbx_user1051/nltk_data'
> - '/var/lang/nltk_data'
> - '/var/lang/share/nltk_data'
> - '/var/lang/lib/nltk_data'
> - '/usr/share/nltk_data'
> - '/usr/local/share/nltk_data'
> - '/usr/lib/nltk_data'
> - '/usr/local/lib/nltk_data'
我尝试了什么
1. 这是我用来安装包的代码,方法是创建一个层以应用于我的 Lambda 函数。
# STEP 1
mkdir folder
cd folder
virtualenv v-env
source ./v-env/bin/activate
pip install pronounceable
deactivate
# STEP 2
mkdir python
cd python
cp -r ../v-env/lib64/python3.6/dist-packages/* .
cd ..
zip -r pronounceable_layer.zip python
aws lambda publish-layer-version --layer-name pronounceable --zip-file fileb://panda_layer.zip --compatible-runtimes python3.6
然后我简单地选择了结果层并将其添加到 Lambda 函数中。
然后,根据 cmudict
的内容(我已手动下载到我的本地计算机)放入 Lambda 根文件夹中名为 nltk_data
的文件夹内的文本文件中.
我还尝试通过添加带有 key/value NLTK_DATA
和 ./nltk_data
的环境变量来缓解此问题,并在函数顶部添加 nltk.download('cmudict', download_dir="/var/task/nltk_data")
,但无济于事。
2. 我还使用 Cloud9 打开 NLTK 文件 data.py
并根据此 nltk.data.path.append()
没有工作。
3. 我也按照这个nltk.download('cmudict', download_dir='/tmp/')
,但是这似乎也不起作用。
我不知道接下来需要做什么。
问题
我需要做什么来确保 cmudict
可供 nltk 在我的 Lambda 函数中使用?
已解决
发布答案以防遇到类似问题的人有所帮助。
我通过再次查看表明无法找到语料库文件 cmudict
的错误消息解决了这个问题。
该文件的预期完整路径如下:
/var/task/nltk_data/corpora/cmudict/cmudict
也就是说,文件cmudict
需要放在一个名为cmudict
的文件夹中,这个文件夹需要放在corpora
里面,这个文件夹需要放在nltk_data
.
这可以通过在以下任一方式中创建路径来实现:
在 Lambda 控制台中手动(右键单击创建 folder/file 并将语料库内容粘贴到编辑器中)
通过在本地计算机上创建文件结构
nltk_data/corpora/cmudict/cmudict
,压缩文件并将 zip 文件上传到 Lambda 编辑器。
注意 - 您可能还需要修改 lambda 代码以反映语料库的预期路径,如下所示:
import nltk
from nltk.corpus import cmudict
nltk.data.path.append("/var/task/nltk_data")
您可能还希望设置环境变量并修改文件 data.py
,如上面链接的答案中所述。