带有SKLEARN,PANDAS和NUMPY问题的Python部署包?

时间:2018-03-14 11:06:14

标签: python pandas machine-learning scikit-learn aws-lambda

我是AWS& amp;的新手Python并尝试使用AWS Lambda函数实现一个简单的ML推荐系统进行自学习。我被包裹在sklearn,numpy和pandas的组合上。如果结合任何两个lib意味着(Pandas和Numpy)或(Numpy和Skype)工作正常并且部署完美。因为我正在使用ML系统,所以我需要sklearn(scipy和pandas和numpy),它们无法工作并在aws lambda测试中得到此错误。 到目前为止我做了什么: 我的部署包来自python3.6 virtualenv,而不是直接来自主机。 (已经安装/配置了python3.6,virtualenv和awscli,并且你的lambda函数代码在〜/ lambda_code目录中):

  1. cd ~(我们将在主目录中构建virtualenv)

  2. virtualenv venv --python=python3.6(创建虚拟环境)

  3. source venv/bin/activate(激活虚拟环境)

  4. pip install sklearn, pandas, numpy

  5. cp -r ~/venv/lib/python3.6/site-packages/* ~/lambda_code(将所有已安装的软件包复制到lambda_code目录的根级别。这将包含一些不必要的文件,但如果需要,您可以自行删除这些文件)

  6. cd ~/lambda_code

  7. zip -r9 ~/package.zip .(拉上lambda包)

  8. aws lambda update-function-code --function-name my_lambda_function --zip-file fileb://~/package.zip(上传到AWS)

  9. 之后得到此错误:

    **"errorMessage": "Unable to import module 'index'"**
    

    START RequestId: 0e9be841-2816-11e8-a8ab-636c0eb502bf Version: $LATEST
    Unable to import module 'index': **Missing required dependencies ['numpy']**
    
    END RequestId: 0e9be841-2816-11e8-a8ab-636c0eb502bf
    REPORT RequestId: 0e9be841-2816-11e8-a8ab-636c0eb502bf  Duration: 0.90 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 33 MB  
    

    我在EC2实例上也尝试了这个但是没有成功。我做了谷歌并阅读了多个博客和解决方案,但没有奏效。 请帮我解决这个问题。

5 个答案:

答案 0 :(得分:1)

所以就像Wai kin chung所说,你需要使用pip3来安装库。

因此要确定哪个python版本是默认版本,您可以输入:

which python

python -v

因此,为了使用python3进行安装,您需要输入:

python3 -m pip install sklearn, pandas, numpy --user

完成后,您可以确保使用以下命令安装软件包:

python3 -m pip freeze

这将显示与python模型一起安装的所有python库。 拥有库后,您需要继续常规步骤。当然你首先要删除放在〜/ venv / lib / python3.6 / site-packages /*中的所有内容。

cd ~/lambda_code
zip -r9 ~/package.zip

答案 1 :(得分:0)

您需要确保所有依赖库和包含您的函数的Python文件都在一个zip文件中,以便它检测正确的依赖项。

基本上,在上传之前,您需要将Numpy,Panda和您自己的文件全部放在一个zip文件中。还要确保您的代码引用本地文件(在相同的解压缩目录中)作为依赖项。如果您已经这样做了,那么问题可能就是如何引用您包含的库。确保您可以使用包含的库作为依赖关系,方法是在部署到Lambda后在AWS上获取正确的相对路径。

答案 2 :(得分:0)

你正在使用python 3.6。 所以 pip3安装numpy 应该使用,试一试。

答案 3 :(得分:0)

如果像以前那样在Windows上运行它,则会遇到在不兼容的OS上编译库的问题。

您可以使用Amazon Linux EC2实例或Cloud9开发实例来构建您的virtualenv,如上所述。

或者,您可以按照这篇文章中的说明下载预编译的wheel文件: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/

基本上,您需要转到https://pypi.org上的项目页面,并下载如下所示的文件:

  • 对于Python 2.7:module-name-version-cp27-cp27mu-manylinux1_x86_64.whl
  • 对于Python 3.6:module-name-version-cp36-cp36m-manylinux1_x86_64.whl

然后将.whl文件解压缩到您的项目目录,然后将内容与lambda代码一起重新压缩。

答案 4 :(得分:0)

在Ubuntu 18.04上也有类似的问题。 通过使用python3.7pip3.7解决了该问题。

安装pip3.7pip3.7 install numpy之类的软件包时,请务必使用pip3.7 install numpy --user

要在Ubuntu上安装python3.7pip3.7,可以使用deadsnakes/ppa

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.7

curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
python3.7 /tmp/get-pip.py

此解决方案也应在Ubuntu 16.04上运行。