当前位置: 首页 > 知识库问答 >
问题:

导入boto3导入错误:没有名为boto3 docker container的模块

荆树
2023-03-14

我正在尝试将代码从bitbucket部署到AWS Elastic beanstalk。从bitbucket部署代码时,我面临导入boto3问题。

但在我以前的docker形象中,工作很好。

旧Docker文件

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中,一切正常。当我将python版本从2.7升级到3.7时,出现了这个导入错误。

Docker文件

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-scripts

Python脚本

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重要错误:没有名为boto3的模块

我试过了

python3-m pip安装boto3

但我在运行脚本时遇到了相同的错误。帮我摆脱困境。

根据python更新文档https://boto3.amazonaws.com/v1/documentation/api/1.16.56/guide/migrationpy3.html

我们得从python2.7升级到python3.7

共有1个答案

拓拔富
2023-03-14

您只在env env虚拟环境中安装了bot3。如果您想使用该模块,首先需要激活环境。

比较:

/ # 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 \
    tzlocal
 类似资料:
  • 问题内容: 我有一个与此问题非常相似的问题,但仍落后了一步。我在Windows 7( 对不起 )64位系统上仅安装了一个Python 3版本。 我在此链接后安装了numpy-如问题中所述。安装进行得很好,但是当我执行时 我收到以下错误: 导入错误:没有名为numpy的模块 我知道这可能是一个超级基本的问题,但我仍在学习。 谢谢 问题答案: NumPy版本1.5.0中添加了对Python 3的支持

  • 问题内容: 我正在使用centos linux。 我有Django的python 2.6,现在我升级到了python 2.7。 Python 2.6位于/usr/lib/python2.6中。 Python 2.7位于/usr/local/lib/python2.7中。 它们都具有site-packages目录,并且都包含django 1.2。 如果我运行python,我将获得2.7版本。 我的问

  • 问题内容: 我看到很多这些错误。我已经尝试了所有我想做的事情,但还没有弄清楚。 我正在开发运行python 2.5和Django 1.3的开发服务器。在解压缩tar.gz下载文件后,使用python setup.py install安装了Django 1.3。 一切正常,我很少需要运行,但是尝试使用新的应用程序,并且遇到了问题。 好的,所以我有PATH问题。 从Django安装程序中,我再次检查目

  • 我有一个与这个问题非常相似的问题。我的Windows 7 64位系统上只安装了一个版本的python 3.5。我通过官方网站安装了Anaconda3.4,正如问题中所建议的那样。安装进行得很顺利,但当我想导入时(我只是从命令行键入python) 然后我退出并键入 已满足要求(使用--upgrade to upgrade):d:\program Files\anaconda3\lib\site软件包

  • 运行此代码后,我发现导入错误:- 如何使用google.apengine.ext

  • 问题内容: 我试图在用Sublime Text编写的Python脚本中使用Gnuplot。每当我构建时,我都会收到错误消息 如果直接在Terminal中执行完全相同的代码行,则导入和使用Gnuplot不会出现问题。 导入错误似乎很常见,仅与其他模块一样。通常,此修复程序与PYTHONPATH有关。但是,Gnuplot在我位于 因此应该找到。 有人解决了这个问题吗? 问题答案: Sublime Te