【问题标题】:NLTK module not found in AWS Lambda在 AWS Lambda 中找不到 NLTK 模块
【发布时间】:2021-04-20 23:43:19
【问题描述】:

我已成功安装了一个名为 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 函数中。 然后,按照this suggestion,我将cmudict(我手动下载到本地计算机)的内容放入文本文件中,该文件位于Lambda 根文件夹中名为nltk_data 的文件夹中。 我还尝试通过添加带有键/值NLTK_DATA./nltk_data 的环境变量来缓解此问题,并在函数顶部添加nltk.download('cmudict', download_dir="/var/task/nltk_data"),但无济于事。

2.我还用Cloud9打开了NLTK文件data.py并按照suggestion修改了路径,因为怀疑nltk.data.path.append()不起作用。

3.我还按照suggestion手动将下载路径设置为nltk.download('cmudict', download_dir='/tmp/'),但这似乎也不起作用。

我不知道接下来我需要做什么。

问题

我需要做些什么来确保 cmudict 可供 nltk 在我的 Lambda 函数中使用?

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda nltk aws-serverless


    【解决方案1】:

    已解决

    发布答案以帮助遇到类似问题的人。

    我通过再次查看错误消息解决了这个问题,该错误消息表明找不到语料库文件cmudict。 该文件的完整预期路径如下:

    /var/task/nltk_data/corpora/cmudict/cmudict

    也就是说,文件cmudict需要放在一个叫cmudict的文件夹中,需要放在corpora里面,需要放在nltk_data里面。

    这可以通过以下任一方式创建路径来实现:

    1. 在 Lambda 控制台中手动(右键单击以创建文件夹/文件并将语料库内容粘贴到编辑器中)

    2. 通过在本地机器上创建文件结构nltk_data/corpora/cmudict/cmudict,压缩文件并将压缩文件上传到 Lambda 编辑器。

    注意 - 您可能还需要修改 lambda 代码以反映到语料库的预期路径,如下所示:

    import nltk
    from nltk.corpus import cmudict
    nltk.data.path.append("/var/task/nltk_data")
    

    您可能还希望设置一个环境变量并修改文件data.py,如上面链接的答案中所述。

    【讨论】:

    • 您好,我的问题与创建此线程的问题无关,但我注意到了。在涉及 lambda 的任何地方,我都看到了用户 sbx_user1051 的提及,我试图找出这个 'sbx_user1051' 用户是谁,但没有运气。任何想法?它似乎是 docker 容器中的用户,但不确定。我找不到有关此用户本身的信息,但它被全部提及。
    • 对不起,我不熟悉你的问题。祝你找到解决办法。
    猜你喜欢
    • 2015-08-21
    • 2016-11-01
    • 1970-01-01
    • 2019-05-03
    • 2016-12-21
    • 1970-01-01
    • 2021-12-16
    • 2021-09-13
    • 2021-11-20
    相关资源
    最近更新 更多