Cloud Foundry部署带paramiko的应用时vendor依赖无法找到cryptography
问题根因
本地下载依赖的环境和Cloud Foundry Python buildpack的运行环境(Linux x86_64)架构、平台不一致,导致下载到vendor目录的cryptography二进制包和CF运行环境不匹配,pip无法识别为可用依赖。如果未配置pip优先从vendor目录检索依赖,也会触发该类报错。
修复步骤
- 调整依赖下载命令,明确指定适配CF运行环境的参数,将命令替换为:
pip download -r requirements.txt --dest vendor --platform manylinux2014_x86_64 --python-version 3.X --only-binary :all:注意将命令中的
3.X替换为你CF使用的Python版本号,需和buildpack选中的Python大版本完全一致(例如3.9、3.10)。如果你本地运行环境本身就是Linux x86_64,和CF环境一致,可省略--platform和--python-version参数。 - 在项目根目录新增
pip.conf配置文件,指定pip优先从vendor目录检索依赖,不走公共PyPI索引,内容如下:[install] no-index = true find-links = ./vendor - 确认
requirements.txt中声明的cryptography版本范围和下载到vendor目录的版本完全匹配,没有版本冲突。 - 重新打包项目推送到CF即可。
额外注意事项
cryptography高版本依赖Rust编译环境,如果你使用源码包部署,CF的默认构建环境可能缺少对应编译工具链,所以必须下载预编译的二进制wheel包,不要使用源码包部署。
内容的提问来源于stack exchange,提问作者sanjay srivatsa
相关产品推荐
相关产品推荐

