You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CircleCI使用AWSCLI时报SyntaxError: Non-ASCII字符'\xc3'错误如何解决?

问题描述

我在一个使用AWSCLI的Ruby on Rails项目中工作,最近将代码推送到Staging环境时,程序尝试从rsa.key导入newkeys、PrivateKey、PublicKey时报错,错误信息如下:

SyntaxError: Non-ASCII character '\xc3' in file /opt/circleci/.pyenv/versions/2.7.12/lib/python2.7/site-packages/rsa/key.py on line 1, but no encoding declared; 详见PEP-0263规范说明

错误信息截图

我的circleci/config.yml配置如下:

orbs:
   aws-ecr: circleci/aws-ecr@7.0.0

version: 2.1

jobs:
  build:
    working_directory: ~/mfds
    docker:
      - image: circleci/ruby:2.3.4-node
      environment:
        RAILS_ENV: citest
        LANG: C.UTF-8
      - image: snowhork/mysql_jp:5.7
        environment:
          MYSQL_ROOT_PASSWORD: ***
          MYSQL_DATABASE: myapp
          MYSQL_USER: user
          MYSQL_PASSWORD: ***
          MYSQL_ROOT_HOST: "%"

  steps:
    - checkout
    - restore_cache:
      key: gemfiles-{{ checksum "mfds/Gemfile.lock" }}

  # Bundle install dependencies
  - run: cd mfds/ && bundle install --path vendor/bundle

  # Store bundle cache
  - save_cache:
      key: gemfiles-{{ checksum "mfds/Gemfile.lock" }}
      paths:
        - /home/circleci/mfds/mfds/vendor/bundle

  - run:
      name: Wait for db
      command: dockerize -wait tcp://localhost:3306 -timeout 1m

  # Database setup
  - run:
      name: db setting
      command: |
        cd mfds
        bundle exec rake db:create
        bundle exec rake db:ridgepole:apply[citest]

  - run:
      name: rspec
      command: |
        cd mfds
        bundle exec rspec

  staging_deploy:
    machine: true
    steps:
      - checkout
      - run:
        name: asset compile
        command: |
          cd mfds
          npm install
          ./node_modules/.bin/webpack --optimize-minimize

     - run:
      name: gem install
      command: |
        gem install aws-sdk-ecs
        pip install futures
        pip install --upgrade awscli

    - run:
      name: push image
      command: |
        export AWS_ACCESS_KEY_ID=$XX_AWS_ACCESS_KEY_ID
        export AWS_SECRET_ACCESS_KEY=$XX_AWS_SECRET_ACCESS_KEY
        bin/deployv2/docker-push staging

    - run:
      name: update service
      command: |
        export AWS_ACCESS_KEY_ID=$XX_AWS_ACCESS_KEY_ID
        export AWS_SECRET_ACCESS_KEY=$XX_AWS_SECRET_ACCESS_KEY
        bin/deployv2/update-task staging
   ....
解决方案

根因说明

报错是因为staging_deploy步骤执行pip install --upgrade awscli时,自动安装了最新版的rsa依赖包,该版本已停止支持Python2.7,代码文件包含非ASCII字符但未声明编码,与Python2.7的默认编码规则冲突。

可落地修复方案

  • 方案1:固定安装兼容Python2.7的rsa版本
    rsa v4.7.2是最后一个兼容Python2.7的版本,在安装awscli前先指定安装该版本即可,修改gem install对应的run步骤:
- run:
    name: gem install
    command: |
      gem install aws-sdk-ecs
      pip install futures
      pip install rsa==4.7.2
      pip install --upgrade awscli
  • 方案2:全局声明Python2.7默认编码
    直接在staging_deploy job下增加编码相关环境变量,无需修改原有安装命令:
staging_deploy:
  machine: true
  environment:
    PYTHONIOENCODING: utf-8
  steps:
    # 原有步骤保持不变即可
  • 方案3:切换Python3运行awscli(优先推荐)
    Python2.7已经停止维护,切换到Python3可从根本上规避编码问题,修改安装命令如下:
- run:
    name: gem install
    command: |
      gem install aws-sdk-ecs
      sudo apt update && sudo apt install -y python3-pip
      pip3 install futures
      pip3 install --upgrade awscli

内容的提问来源于stack exchange,提问作者Michel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:12:04