【问题标题】:AWS CLI upload failed: unknown encoding: idnaAWS CLI 上传失败:未知编码:idna
【发布时间】:2019-04-08 05:08:23
【问题描述】:

我正在尝试使用 AWS CLI 将一些文件推送到 s3,但遇到了错误:

upload failed: ... An HTTP Client raised and unhandled exception: unknown encoding: idna

我相信这是一个 Python 特有的问题,但我不确定如何为我的 Python 解释器启用这种类型的编码。我刚刚安装了 Python 3.6,并验证了它被 powershell 和 cmd 使用。

$> python --version Python 3.6.7

如果这不是特定于 Python 的问题,那么了解我也刚刚安装了 AWS CLI 并对其进行了正确配置可能会有所帮助。让我知道我是否还缺少其他任何东西来帮助解决这个问题。谢谢。

【问题讨论】:

  • 我们需要看源码。 aws cli 是一个独立的应用程序。您使用的是 python SDK 还是命令行 CLI?如果是后者,我建议您看一下 sdk,因为它在 python 中使用起来更方便,然后“脱壳”到 cli。
  • @DanFarrell 好吧,它失败的源代码是 webpack 编译的数百行长的 javascript。我目前正在使用 Python 命令行,因为这是 AWS CLI 所依赖的。我将检查 SDK 以查看是否可以解决此问题。
  • 我对你那里的措辞感到困惑,我想知道我是否正在接受你自己的困惑。例如,您说“我正在使用 python 命令行……这就是 cli 所依赖的”,我不确定您的意思。在 pythion 中实现的 aws cli 是由 aws 构建的 c_ommand _l_ine _i_nterface。它又构建在boto 库之上,这些库本身_是 python sdk。
  • @DanFarrell 好吧,我安装了 AWS CLI,一切正常。我将其配置为与我的帐户一起使用,这一切都没有问题。当我开始将东西推送到 S3 时,我收到了这个错误。在其他 SO 帖子上阅读了一些有关此错误的信息后,似乎我的 Python 版本需要更新到 3.6,以便修复此编码错误,但即使在确保 Python 版本正确之后,我仍然看到错误。老实说,我可能对正在发生的事情感到困惑,这是我第一次使用 AWS CLI。
  • 从 python 2 和 3 开始,我已经使用了相当多的 aws cli 和 python sdk,我很乐意帮助你。但是如果没有任何您正在尝试做的示例,我该怎么办?

标签: python-3.x amazon-s3 aws-cli


【解决方案1】:

作为一种解决方法,将以下导入语句放入 aws-script.py 文件中。

import encodings.idna

32 位版本的完整路径是 c:\Program Files (x86)\Amazon\AWSCLI\bin\aws-script.py

64 位版本的完整路径是C:\Program Files\Amazon\AWSCLI\bin\aws-script.py

我在this answer找到了类似问题的解决方案

【讨论】:

  • 谢谢!这是唯一对我有用的解决方案。在我的 64 位版本中,路径是 C:\Program Files\Amazon\AWSCLI\bin\aws-script.py,我在 import sys 之后将这条线卡住了。
  • 另外,请注意 aws-script.py 不存在于较旧的 aws-cli 安装中,因此您可能需要先使用 msi 安装程序更新到最新版本。
  • 在 64 位版本上也为我工作。干得好!
【解决方案2】:

我在 Windows 中遇到了同样的问题。

在调查问题后,我意识到问题出在使用 MSI 安装程序 (x64) 安装的 aws-cli 中。从已安装程序列表中删除“AWS命令行界面”并使用pip安装aws-cli后,问题解决了。

我也尝试安装 MSI 安装程序 x32,但问题消失了。

【讨论】:

  • 通过 pip 重新安装 AWS-CLI 确实对我有用。以下是命令(需要 Python 和 curl):curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pypython get-pip.pypip3 install awscli --upgrade --user
  • @justin 这应该是公认的答案。我每次执行aws s3 cp --recursive <path> s3://<path> 时都会遇到同样的问题,并且在使用pip 安装awscli 之后我就没有遇到过问题。
  • 暂时接受,还没来得及确认。
  • 请注意,使用 pip / pip3 重新安装并不适合所有人。我有一个干净的 anaconda 安装,但尝试使用 pip 安装 awscli 时出现了关于 no file association for .py 的错误。试图找出这些错误导致我提出了许多使用 msi 安装的 stackoverflow 建议。最终我回到了我的 msi 安装并使用了@Vereb 的解决方案。
  • 可以在安装程序版本无法从数百个中随机上传几个 JSON 时验证此操作是否有效,这样做可以解决问题。运行win10。
【解决方案3】:

Windows 上,这可能是使用 MSI 安装程序安装 AWS-cli 工具的问题。 似乎解决此问题的最佳方法是使用与 python 一起安装的 aws-cli 工具。

先决条件:Python3Pip3

验证您是否安装了 Python 和 Pip

C:\> python --version
Python 3.7.1
C:\> pip3 --version
pip 18.1 from c:\program files\python37\lib\site-packages\pip (python 3.7)

卸载 AWS-CLI 工具 MSI 安装程序

使用 pip 安装 aws-cli 工具

C:\> pip3 install awscli

检查 aws-cli 是否已经在您的路径中;如果没有,添加它

C:\> where aws
C:\Program Files\Python37\Scripts\aws

如果没有,请找到 aws-cli 工具的部署位置,并将路径添加到您的 PATH 环境变量(可以在控制面板 > 系统 > 高级系统设置 > 环境变量...中设置)。

以下是已部署 AWS cli 工具的常用路径:

Python 3 和 pip3 – C:\Program Files\Python37\Scripts\

Windows 早期版本上的 Python 3 和 pip3 --user 选项 – %USERPROFILE%\AppData\Local\Programs\Python\Python37\Scripts

Windows 10 上的 Python 3 和 pip3 --user 选项 – %USERPROFILE%\AppData\Roaming\Python\Python37\Scripts

【讨论】:

    【解决方案4】:

    我遇到了同样的错误,并通过更改 AWC CLI 和 Python 路径的顺序来修复:

    之前:

    PATH=C:\Program Files\Python35\Scripts\;C:\Program Files\Python35\;...;C:\Program Files\Amazon\AWSCLI\bin\;...
    

    之后:

    PATH=...;C:\Program Files\Amazon\AWSCLI\bin\;...;C:\Program Files\Python35\Scripts\;C:\Program Files\Python35\
    

    看起来 Python3 影响了 AWS CLI,它只是一个 cmd 调用 Python 程序。

    【讨论】:

    • 嗯,它似乎不适用于某些情况。错误每 10 次或更多次发生一次。听起来使用 awscli pip 包而不是 Windows 可执行包更好。将继续调查。
    【解决方案5】:

    即使我也面临同样的问题。我在 Windows server 2008 R2 上运行它。我试图使用以下命令将大约 500 个文件上传到 s3。

    aws s3 cp sourcedir s3bucket --recursive --acl bucket-owner-full-control --profile profilename

    它运行良好,几乎可以上传所有文件,但对于最初的 2 或 3 个文件,它曾经因错误而失败:一个 HTTP 客户端引发和未处理的异常:未知编码:idna

    此错误不一致。上传失败的文件,如果我尝试再次运行它可能会成功。这很奇怪。

    在反复试验的基础上进行了尝试,它开始运作良好。

    解决方案:

    1. 已卸载 Python 3 和 AWS CLI。
    2. 已安装 Python 2.7.15
    3. 在环境变量 PATH 中添加了 python 安装路径。还将 pythoninstalledpath\scripts 添加到 PATH 变量中。
    4. AWS CLI 不能与 Windows Server 2008 上的 MS Installer 一起正常工作,而是使用 PIP。

    命令:

    pip 安装 awscli

    注意:要让 pip 工作,不要忘记将 pythoninstalledpath\scripts 添加到 PATH 变量中。

    你应该有以下版本:

    命令:

    aws --version

    输出:aws-cli/1.16.72 Python/2.7.15 Windows/2008ServerR2 botocore/1.12.62

    瞧!错误消失了!

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 2022-08-16
      • 2019-07-20
      相关资源
      最近更新 更多