gpt4 book ai didi

numpy - 如何为我的 AWS Elastic Beanstalk 应用程序安装 matplotlib?

转载 作者:行者123 更新时间:2023-12-04 11:23:23 25 4
gpt4 key购买 nike

我在 AWS Elastic Beanstalk 上部署 matplotlib 很费时间。 I gather我的问题来自某些依赖项以及 EB 部署使用 PIP 安装的软件包的方式,并试图遵循 instructions here on SO以解决问题。

我首先尝试按照链接答案中的建议逐步部署,方法是将 matplotlib 包堆栈的各个部分添加到我的 requirements.txt 中。分阶段归档。但这需要永远(对于每个阶段)并且容易出现故障和超时(这似乎使构建目录落后于后续包安装)。

因此,在答案末尾随手提到的简单解决方案对我很有吸引力:只是 eb ssh , 激活 virtialenv

source /opt/python/run/venv/bin/activate

pip install手动打包。但我也不能让它工作。首先,我经常遇到遗留的构建目录(如上所述)
pip can't proceed with requirement 'xxxx' due to a pre-existing build directory.
location: /opt/python/run/venv/build/xxxx
This is likely due to a previous installation that failed.
pip is being responsible and not assuming it can delete this.
Please delete it and try again.

但即使在删除这些之后,我始终得到
Exception:
Traceback (most recent call last):
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/req.py", line 1197, in prepare_files
do_download,
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/req.py", line 1375, in unpack_url
self.session,
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/download.py", line 582, in unpack_http_url
unpack_file(temp_location, location, content_type, link)
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/util.py", line 625, in unpack_file
untar_file(filename, location)
File "/opt/python/run/venv/lib/python2.7/site-packages/pip/util.py", line 533, in untar_file
os.makedirs(location)
File "/opt/python/run/venv/lib64/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/opt/python/run/venv/build/xxxx'

回复 pip install xxxx (和 sudo pipsudo: pip: command not found 失败)。

我该怎么做才能让它在 AWS-EB 上运行?特别是,我需要做什么才能使简单的 SSH+PIP 方法起作用;或者还有其他更好的 - 更简单! ——我应该尝试的方法。

FWIW,我有一个 .ebextensions/software.config
packages:
yum:
gcc-c++: []
gcc-gfortran: []
python-devel: []
atlas-sse3-devel: []
lapack-devel: []
libpng-devel: []
freetype-devel: []
zlib-devel: []

和一个 requirements.txt
pytz==2014.10
pyparsing==2.0.3
python-dateutil==2.4.0
nose==1.3.4
six>=1.8.0
mock==1.0.1

numpy==1.9.1

matplotlib==1.4.2

大约 4 小时后,我变得 NumPy 了(正如 pip list 在 EB virtualenv 中所报告的那样)。

并且(如果重要的话)SSHing 的用户是具有该策略的组的一部分
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:*",
"ec2:*",
"elasticloadbalancing:*",
"autoscaling:*",
"cloudwatch:*",
"s3:*",
"sns:*",
"cloudformation:*",
"rds:*",
"sqs:*",
"iam:PassRole"
],
"Resource": "*"
}
]
}

最佳答案

我使用了许多方法在 Windows 和 Linux 系统上构建和部署 numpy/scipy/matplotlib。我使用过系统提供的包管理器(aptitude、rpm)、第 3 方包管理器(pypm)、Python 包管理器(easy_install、pip)、源代码版本,使用过不同的构建环境/工具(GCC,还有 Intel MKL、OpenMP )。在这样做的过程中,我遇到了许多非常烦人的情况,但也了解了很多关于每种方法的优缺 pip 。

我没有使用 Elastic Beanstalk (EB) 的经验,但我有使用 EC2 的经验。我看到您可以通过 SSH 连接到一个实例并四处查看。所以,我在下面的进一步建议是基于

  • 以上经验和上
  • 关于 Beanstalk 和
  • 或多或少明显的边界条件
  • 您的应用场景,在 SO 和
  • 上的另一个问题中进行了描述
  • 事实上,您只想让事情快速运行

  • 我的建议:从不自己构建这些东西开始。不要使用 pip 。如果可能,尝试使用 Linux 发行版的包管理器,让它使用单个命令(例如 sudo apt-get install python-matplotlib )处理您所需的一切安装。

    缺 pip :
  • 可能是旧的软件包版本,取决于使用的 Linux 发行版
  • 非优化构建(例如,不是针对 Intel MKL 构建的,或者不利用 OpenMP 功能或不使用特殊指令集)

  • 好处:
  • 它可以快速下载,因为包很可能缓存在您的机器附近
  • 它可以快速安装(这些软件包是预先构建的,不涉及编译)
  • 它只是有效

  • 所以,我希望你可以在这些机器上使用 aptitude 或 rpm 或其他任何东西,并继承分发包维护人员在幕后为你所做的伟大工作。

    一旦您对您的应用程序充满信心并确定了一些瓶颈或问题,您可能有理由使用较新版本的 numpy/matplotlib/... 或者您可能有理由通过创建优化构建来拥有这些版本的更快版本。

    编辑:概述方法的 EB 相关细节

    与此同时,我们了解到 EB 默认运行 Amazon Linux它基于红帽企业 Linux。同样,它使用 yum因为包管理器和包是 RPM 格式。

    亚马逊提供有关可用软件包的文档。在 Amazon Linux 2014.09 中,这些软件包可用: http://aws.amazon.com/de/amazon-linux-ami/2014.09-packages/

    在这个列表中,我们发现
  • numpy-1.7.2
  • python-matplotlib-0.99.1.2

  • 根据 changelog,这个版本的 matplotlib 已经很老了。它来自 2009 年 9 月:“2009-09-21 标记为发布 0.99.1”。

    我没想到它这么旧,但仍然可能足以满足您的需求。所以我们继续我们的计划(但我明白这是否是一个障碍)。

    现在,我们 have learned系统 Python 和 EB Python 是相互隔离的。这并不意味着 EB Python 无法访问系统 Python 站 pip 包。我们只需要它来说明。一个简单而干净的方法是为 EB Python 应该可以访问的包设置适当的目录结构,并通过 sys.path 将此目录传达给 EB Python。 .

    显然,我们需要自定义 EB 容器的引导阶段。可用工具记录在此处: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

    显然,我们想利用 packages方法,并告诉 EB 安装 numpypython-matplotlib通过 yum 打包。所以相应的配置文件部分应该包含:
     packages:  
    yum:
    numpy: []
    python-matplotlib: []

    明确提及 numpy可能不是必需的,它可能是 python-matplotlib 的依赖项。

    此外,我们需要利用 commands部分:

    You can use the commands key to execute commands on the EC2 instance. The commands are processed in alphabetical order by name, and they run before the application and web server are set up and the application version file is extracted.



    以下三个命令创建上述目录,并设置指向 numpy/mpl 安装路径的符号链接(symbolic link)(这些路径希望在执行这些命令时可用):
    commands:
    00-create-dir:
    command: "mkdir -p /opt/py26-selected-site-packages"
    01-link-numpy:
    command: "ln -s /usr/lib64/python2.6/site-packages/numpy /opt/py26-selected-site-packages/numpy"
    02-link-mpl:
    command: "ln -s /usr/lib64/python2.6/site-packages/matplotlib /opt/py26-selected-site-packages/matplotlib"

    两个不确定因素:AWS 文档没有澄清 packages处理之前 commands被执行。你得试试。不行,用 container_commands .其次,这只是一个有根据的猜测 /usr/lib64/python2.6/site-packages/matplotlib安装 python-matplotlib 后可用。它应该安装到这个地方,但它可能会在其他地方结束。需要进行测试。 Numpy 应该在指定为从 this 推断的地方结束文章。

    [来自 SEB 的更新]
    AWS 文档说“cfn-init 帮助程序脚本按以下顺序处理这些配置部分:包、组、用户、源、文件、命令,然后是服务。”
    http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html

    所以,你的方法是安全的
    [/更新]

    正如此答案的评论中所指出的,关键步骤是告诉您的 Python 应用程序在哪里查找包。直接修改 sys.path在尝试导入之前是控制此情况的可靠方法。以下代码将我们的特殊目录添加到 Python 查找包的目录选择中,然后尝试导入 matplotlib:
    sys.path.append("/opt/py26-selected-site-packages")
    from matplotlib import pyplot
    sys.path中的订单定义优先级,因此如果在其他目录之一中有任何其他 matplotlib 或 numpy 包可用,则可能是一个更好的主意
    sys.path.insert(0, "/opt/py26-selected-site-packages")

    但是,如果我们的整个方法经过深思熟虑,这应该是不必要的。

    关于numpy - 如何为我的 AWS Elastic Beanstalk 应用程序安装 matplotlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099881/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com