如何用Poetry从AWS S3仓库安装私有Python包?
解决Poetry无法从S3私有仓库安装依赖的问题
1. 修正源名称不匹配的问题
你添加的私有源名称是my-conda-repo,但在pyproject.toml中指定的源是INTERNAL,两者完全不对应,这是导致Poetry找不到包的直接原因之一。
修改pyproject.toml中的依赖配置:
[tool.poetry.dependencies] my-utils = { version = "5.0.1", source = "my-conda-repo" }
2. 确保S3仓库符合PEP 503标准结构
Poetry遵循PyPI的PEP 503规范,要求私有仓库必须是simple风格的索引结构。你的S3桶内需要有如下层级:
my-conda-repo/ └── my-key/ └── simple/ └── my-utils/ ├── index.html # 包索引文件 ├── my-utils-5.0.1-py3-none-any.whl └── my-utils-5.0.1.tar.gz
如果缺少simple/目录或对应的包索引,Poetry无法识别安装候选。
添加源时,路径指向包含simple/的父目录即可(Poetry会自动拼接/simple/路径):
poetry source add --secondary my-conda-repo s3://my-conda-repo/my-key
3. 验证AWS凭证与权限
确保~/.aws/credentials中的凭证拥有访问目标S3路径的权限:
- 至少需要
s3:GetObject权限,允许读取桶内的包文件和索引 - 可以通过AWS CLI测试访问是否正常:
aws s3 ls s3://my-conda-repo/my-key/simple/my-utils/
如果命令返回包文件列表,说明凭证有效;否则需要检查凭证配置或IAM权限。
若默认AWS profile不是目标profile,添加源时可指定profile:
poetry source add --secondary my-conda-repo s3://my-conda-repo/my-key --profile your-aws-profile
4. 确保Poetry环境安装了boto3
Poetry依赖boto3库访问S3,需要确保当前环境(虚拟环境或Poetry全局环境)已安装:
# 在虚拟环境中安装 pip install boto3
5. 环境变量临时验证(可选)
如果怀疑凭证配置有问题,可通过环境变量直接指定凭证测试:
export AWS_ACCESS_KEY_ID="你的访问密钥ID" export AWS_SECRET_ACCESS_KEY="你的私有访问密钥" poetry install
若此方式成功,说明~/.aws/credentials的配置存在问题,需检查profile或凭证内容。
内容的提问来源于stack exchange,提问作者Javide
相关产品推荐
相关产品推荐

