带有 SKLEARN、PANDAS 和 NUMPY 问题的 Python 部署包?
Posted
技术标签:
【中文标题】带有 SKLEARN、PANDAS 和 NUMPY 问题的 Python 部署包?【英文标题】:Python Deployment Package with SKLEARN, PANDAS and NUMPY issue? 【发布时间】:2018-08-22 21:16:50 【问题描述】:我是 AWS 和 Python 的新手,正在尝试使用 AWS Lambda 函数实现一个简单的 ML 推荐系统以进行自学。我坚持包装 sklearn、numpy 和 pandas 的组合。如果结合任何两个库意味着(Pandas 和 Numpy)或(Numpy 和 Skype)工作正常并完美部署。因为我使用的是 ML 系统,所以我需要 sklearn(scipy 和 pandas 和 numpy),它无法工作,并且在 aws lambda 测试中出现此错误。 到目前为止我做了什么: 我的部署包来自 python3.6 virtualenv,而不是直接来自主机。 (已经安装/配置了 python3.6、virtualenv 和 awscli,并且您的 lambda 函数代码在 ~/lambda_code 目录中):
cd ~
(我们将在主目录中构建 virtualenv)
virtualenv venv --python=python3.6
(创建虚拟环境)
source venv/bin/activate
(激活虚拟环境)
pip install sklearn, pandas, numpy
cp -r ~/venv/lib/python3.6/site-packages/* ~/lambda_code
(将所有已安装的包复制到 lambda_code 目录的根级别。这将包括一些不必要的文件,但如果需要,您可以自己删除这些文件)
cd ~/lambda_code
zip -r9 ~/package.zip .
(压缩 lambda 包)
aws lambda update-function-code --function-name my_lambda_function --zip-file fileb://~/package.zip
(上传到 AWS)
之后出现此错误:
**"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 实例上尝试过,但没有成功。我做了谷歌并阅读了多个博客和解决方案,但没有成功。 请帮我解决这个问题。
【问题讨论】:
你检查了this和this 是的,已经尝试过了,但是需要包 SKLEARN、Numpy 和 Pandas,并且与版本没有冲突。 【参考方案1】:您需要确保所有依赖库和包含您的函数的 Python 文件都在一个 zip 文件中,以便它检测正确的依赖关系。
所以本质上,在上传之前,您需要将 Numpy、Panda 和您自己的文件全部放在一个 zip 文件中。还要确保您的代码将本地文件(在同一个解压缩目录中)引用为依赖项。如果您已经这样做了,那么问题可能是您包含的库是如何被引用的。一旦部署到 Lambda,通过在 AWS 上获取正确的相对路径,确保您能够将包含的库用作依赖项。
【讨论】:
但这也与 Numpy 或其他类似引用的库隔离?如果 Numpy 和你的其他库和资源在同一个位置,但可以引用其他的,那就很奇怪了。 是的,这是非常奇怪的行为,我认为 Numpy、pandas 和 sklearn lib 存在兼容性问题。因为 pandas 和 sklearn lib 都使用 numpy。【参考方案2】:你正在使用 python 3.6 。 所以 pip3 安装 numpy 应该用,试试看。
【讨论】:
是的,我已经尝试过使用 pip3 的 python 3.6 和 python 2.7。但它不起作用并出现错误。【参考方案3】:所以就像 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
【讨论】:
【参考方案4】:如果您在 Windows 上运行它(就像我一样),您会遇到在不兼容的操作系统上编译的库的问题。
您可以使用 Amazon Linux EC2 实例或 Cloud9 开发实例来构建您的 virtualenv,如上所述。
或者,您可以下载本文讨论的预编译轮文件: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-compatible/
基本上,你需要去https://pypi.org上的项目页面并下载如下命名的文件:
对于 Python 2.7:模块名称-版本-cp27-cp27mu-manylinux1_x86_64.whl 对于 Python 3.6:模块名称-版本-cp36-cp36m-manylinux1_x86_64.whl然后将 .whl 文件解压缩到您的项目目录,并将内容与您的 lambda 代码一起重新压缩。
【讨论】:
【参考方案5】:在 Ubuntu 18.04 上遇到了类似的问题。
使用python3.7
和pip3.7
解决了这个问题。
安装软件包时使用pip3.7
很重要,例如pip3.7 install numpy
或pip3.7 install numpy --user
要在 Ubuntu 上安装 python3.7
和 pip3.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。
【讨论】:
以上是关于带有 SKLEARN、PANDAS 和 NUMPY 问题的 Python 部署包?的主要内容,如果未能解决你的问题,请参考以下文章
用于 sklearn 管道的 pandas 到 numpy 数组