我正在尝试将代码从bitbucket部署到AWS弹性豆茎。在从bitbucket部署代码时,我面临导入boto3问题。
但在我以前的码头形象里工作还不错。
旧码头文件
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
RUN apk add --update --no-cache build-base python3-dev python3 libffi-dev libressl-dev bash git gettext ca-certificates curl groff less zip libstdc++ jq \
&& curl -O https://bootstrap.pypa.io/get-pip.py \
&& python3 get-pip.py \
&& pip install --upgrade --use-feature=2020-resolver six awscli awsebcli \
&& rm -rf /var/cache/apk/*
RUN apk --no-cache add python py-pip \
&& pip --no-cache-dir install --upgrade pip \
&& pip --no-cache-dir install --upgrade --user boto3 boto
RUN apk update && \
apk add --no-cache git openssh perl && \
pip install pytz tzlocal在Python2.7 2.7中,一切都很好。当我将python版本从2.7升级到3.7时,会得到这个导入boto3错误。
码头文件
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
RUN apk add --update --no-cache build-base python3-dev python3 libffi-dev libressl-dev bash git gettext ca-certificates curl groff less zip libstdc++ jq py3-pip\
&& pip3 install --upgrade six awscli awsebcli \
&& rm -rf /var/cache/apk/*
RUN apk --no-cache add python3 py3-pip\
&& python3 -m venv env-env \
&& source env-env/bin/activate \
&& pip3 install --upgrade pip \
&& pip3 install --upgrade boto3
RUN apk update && \
apk add --no-cache git openssh perl && \
python3 -m venv env-env && \
source env-env/bin/activate && \
pip3 install pytz tzlocal
ENV PATH "$PATH:~/.local/bin"
ADD deployment-scripts /opt/deployment-scriptsPython脚本
from __future__ import print_function
import os
import sys
from time import strftime, sleep
import boto3
from botocore.exceptions import ClientError
from time import strftime
from datetime import datetime
from pytz import timezone
from tzlocal import get_localzone当我运行这个脚本文件时
导入boto3 ImportError:没有名为boto3的模块
我试过
python3 -m pip安装boto3
但我在运行脚本时也会遇到同样的错误。帮我摆脱这一切。
根据python更新documet https://boto3.amazonaws.com/v1/documentation/api/1.16.56/guide/migrationpy3.html
我们必须从python2.7升级到python3.7
发布于 2021-07-01 19:52:13
您只在您的boto3虚拟环境中安装了env-env。如果您想要使用该模块,您需要首先激活环境。
比较:
/ # which python3
/usr/bin/python3
/ # python3
Python 3.9.5 (default, May 12 2021, 20:44:22)
[GCC 10.3.1 20210424] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'boto3'通过以下方式:
/ # . env-env/bin/activate
(env-env) / # which python3
/env-env/bin/python3
(env-env) / # python3
Python 3.9.5 (default, May 12 2021, 20:44:22)
[GCC 10.3.1 20210424] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>>另一种解决方案是不使用虚拟环境。现在还不清楚为什么要创建它,因为您正在构建一个容器映像--创建独立Python环境的通常原因大部分都不适用,因为容器本身就是您的隔离。
不相关的话,这个.
ENV PATH "$PATH:~/.local/bin".不像你想的那样.ENV关键字不会展开~,因此您将得到一个包含文本~的路径,该路径与任何内容都不匹配。此外,$PATH将匹配主机上的$PATH值,而不是容器默认值,因此您可能最终会为$PATH定义一个值,其中包含各种不存在的目录。
您的Dockerfile中有很多事情我不确定是否有必要(因为我没有运行您的代码)。这足以让我编写使用boto3模块的Python代码:
FROM alpine:latest
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
RUN apk add --update --no-cache \
build-base \
ca-certificates \
curl \
git \
py3-cryptography \
py3-pip \
python3 \
python3-dev \
zip
RUN pip3 install --upgrade \
boto3 \
pytz \
tzlocalhttps://stackoverflow.com/questions/68215489
复制相似问题