使用SSH+Git通过Poetry添加/安装Python依赖失败问题求助
咱们先把问题拆清楚:你手动用git clone git@github.com:myorg/myproj.git能正常搞定,但用Poetry执行poetry add或者poetry install就报错,而且全程没提示你输入SSH密钥的密码——这核心原因十有八九是Poetry运行的环境没连上你的SSH代理,导致没法用已有的密钥认证。
下面给你一步步排查和解决的办法:
1. 先确认SSH代理在干活,密钥已经加载
不管你是用Windows的Pageant,还是Git Bash里的ssh-agent,得先确保这俩玩意儿在运行,而且你的SSH私钥已经加进去了:
- 用Pageant的话:打开Pageant小图标,看看你的密钥是不是在列表里。如果没在,点「Add Key」选你的私钥文件(比如
id_rsa),输入密码后别关Pageant。 - 用Git Bash的ssh-agent:打开Git Bash,输入
ssh-add ~/.ssh/id_rsa,输完密钥密码后,这个终端窗口别关——ssh-agent就靠这个窗口活着呢。
2. 让Poetry跟着SSH代理的环境走
Poetry有时候会“隔离”自己的运行环境,没继承当前shell里的SSH相关变量(比如SSH_AUTH_SOCK),尤其是在Windows用PowerShell/CMD的时候。试试这俩办法:
办法A:从已经加载好密钥的终端跑Poetry
比如你刚才在Git Bash里执行ssh-add成功了,那就在同一个Git Bash窗口里直接跑poetry add git+ssh://git@github.com:myorg/myproj.git或者poetry install——这样Poetry就能拿到SSH代理的权限,不用再输密码。
办法B:指定Poetry用你测试过的Git程序
有时候Poetry会用自己内置的Git,或者系统里的Git路径不对。你可以手动指定它用你平时能用的那个Git:
# 配置Poetry使用你本地的Git路径(换成你实际的安装路径) poetry config git.executable "C:\\Program Files\\Git\\cmd\\git.exe"
3. 检查pyproject.toml的配置(虽然你这格式大概率没问题)
顺便确认下依赖配置的格式,如果要指定分支/标签的话,得这么写:
myproj = { git = "git@github.com:myorg/myproj.git", branch = "main" }
要是不需要指定版本,你原来的写法也没问题,这步主要是排除格式错误。
4. 给Git加个SSH配置,避免密钥混淆
打开你的~/.ssh/config文件(Windows路径是C:\Users\你的用户名\.ssh\config),添加针对GitHub的配置:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
这样Git每次连GitHub都会用你指定的这个密钥,不会乱试其他密钥导致认证失败。
最后验证一下
先在终端跑ssh -T git@github.com,如果看到Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.,说明SSH认证没问题。然后在同一个终端里跑Poetry命令,应该就能正常拉取依赖了。
内容的提问来源于stack exchange,提问作者Zerg Overmind

