Git Actions中用SAM构建项目遇OpenSSL相关AttributeError求助
问题:AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'
使用Python 3.9在GitHub Actions中构建项目,12月30日前同一代码构建正常,今日出现错误:AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'。未显式引入PyOpenSSL或Cryptography包,尝试升级、降级这两个包均无法解决问题,观察到GitHub Actions安装Python时自动下载了pyopenssl==22.0.0。
完整错误栈
Run sam build --config-env dev Traceback (most recent call last): File "/home/runner/work/_temp/setup-sam-A5vDEq/bin/sam", line 8, in <module> sys.exit(cli()) File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/click/core.py", line 1651, in invoke cmd_name, cmd, args = self.resolve_command(ctx, args) File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/click/core.py", line 1698, in resolve_command cmd = self.get_command(ctx, cmd_name) File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/samcli/cli/command.py", line 133, in get_command mod = importlib.import_module(pkg_name) File "/opt/hostedtoolcache/Python/3.9.16/x64/lib/python3.9/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/samcli/commands/build/__init__.py", line 6, in <module> from .command import cli # noqa File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/samcli/commands/build/command.py", line 12, in <module> from samcli.commands._utils.options import ( File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/samcli/commands/_utils/options.py", line 21, in <module> from samcli.commands._utils.template import get_template_data, TemplateNotFoundException File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/samcli/commands/_utils/template.py", line 10, in <module> from botocore.utils import set_value_from_jmespath File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/botocore/utils.py", line 37, in <module> import botocore.httpsession File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/botocore/httpsession.py", line 46, in <module> from urllib3.contrib.pyopenssl import ( File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/urllib3/contrib/pyopenssl.py", line 50, in <module> import OpenSSL.crypto File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/OpenSSL/__init__.py", line 8, in <module> from OpenSSL import crypto, SSL File "/home/runner/work/_temp/setup-sam-A5vDEq/.venv/lib/python3.9/site-packages/OpenSSL/crypto.py", line 3268, in <module> _lib.OpenSSL_add_all_algorithms() AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms' Error: Process completed with exit code 1.
GitHub Actions配置
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.9' - uses: aws-actions/setup-sam@v2 - uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: aws-secret-access-key: aws-region: us-east-2 - run: echo "export SAM_CLI_TELEMETRY=0" >>~/.profile - run: source ~/.profile # Run unit tests - run: pip install -r tests/requirements.txt - run: python -m pytest tests/unit -v
解决方法
锁定依赖版本:该错误源于PyOpenSSL 22.0.0与新版本Cryptography的API不兼容,直接安装兼容版本的依赖包:
pip install pyopenssl==23.3.0 cryptography==41.0.7也可以在项目的
requirements.txt中添加这两个包的固定版本号,确保依赖稳定。修改GitHub Actions流程:在安装测试依赖前,先安装指定版本的依赖包,覆盖自动安装的旧版本:
在pip install -r tests/requirements.txt步骤前添加:- run: pip install pyopenssl==23.3.0 cryptography==41.0.7指定SAM CLI版本:
aws-actions/setup-sam@v2默认拉取最新SAM CLI,可能引入不兼容依赖。可以指定稳定版本:- uses: aws-actions/setup-sam@v2 with: sam-version: '1.97.0'
内容的提问来源于stack exchange,提问作者Vidya Raghavendra
相关产品推荐
相关产品推荐

