【问题标题】:pip install -e "private_repo" results in error, whereas git clone "private_repo" executes OKpip install -e "private_repo" 导致错误,而 git clone "private_repo" 执行 OK
【发布时间】:2021-09-12 21:48:16
【问题描述】:

我在 Gitea 上有一个私人 git 存储库。我已经为我的服务器设置了部署密钥,并且在服务器上我在C:\Users\harry\.ssh\id_ed25519中有相关的私钥

当我尝试直接git clone repo 时,它可以正常工作:

(venv) harry@DESKTOP-4NS8B70 d:\>git clone "ssh://git@git.myserver.com/my_username/my_package.git" my_package    
Cloning into 'my_package'...
Enter passphrase for key '/c/Users/harry/.ssh/id_ed25519': 
remote: Enumerating objects: 52, done.
remote: Counting objects: 100% (52/52), done.
Receiving objects: 100% (52/52), 10.18 KiB | 5.09 MiB/s, done.
Resolving deltas:  95% (20/21)00% (45/45), done.
remote: Total 52 (delta 21), reused 0 (delta 0)
Resolving deltas: 100% (21/21), done.

到目前为止,一切都很好!但是,当我尝试通过pip install -e "git+ssh://git@git.myserver.com/my_username/my_package.git#egg=my_package" 安装相同的软件包时,会导致错误:

(venv) harry@DESKTOP-4NS8B70 d:\>pip install -e "git+ssh://git@git.myserver.com/my_username/my_package.git#egg=my_package"
Obtaining my_package from git+ssh://****@git.myserver.com/my_username/my_package.git#egg=my_package
  Cloning ssh://****@git.myserver.com/my_username/my_package.git to d:\my_app\venv\src\my-package
  Running command git clone -q 'ssh://****@git.myserver.com/my_username/my_package.git' 'd:\my_app\venv\src\my-package'
  git@git.myserver.com: Permission denied (publickey).
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights
  and the repository exists.
WARNING: Discarding git+ssh://****@git.myserver.com/my_username/my_package.git#egg=my_package. Command errored out with exit status 128: git clone -q 'ssh://****@git.myserver.com/my_username/my_package.git' 'd:\my_app\venv\src\my-package' Check the logs for full command output.

当然,当我尝试使用以下条目pip install -r requirements.txt 时,也会发生同样的事情

-e "git+ssh://git@git.myserver.com/my_username/my_package.git#egg=my_package"

我的第一个想法是问题发生了,因为它不知何故没有询问Enter passphrase for key,但我不知道为什么!有什么想法可能出了什么问题?

【问题讨论】:

  • pip 是非交互式程序,它阻止交互式子进程与用户交互。要解决此问题,您必须配置ssh 以避免询问密码;从密钥中删除密码或设置ssh-agent
  • 这真的很有帮助!我通过 SSH 连接到我的服务器,所以我需要做的就是在那个 SSH 控制台中运行start-ssh-agent。然后我就可以pip install

标签: git ssh pip gitea


【解决方案1】:

正如 Fernando Freitas Alves 中的 Pip Installing a Package From a Private Repository 中所评论和描述的,添加 ssh 代理将允许您的 pip 命令完成:

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "dev@email.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

另一种方法是使用 HTTPS URL:

git config --global url.https://github.com/.insteadOf git@github.com:

假设您的凭据为credential manager caching,相同的 pip 命令将自动使用 HTTPS URL 而不是 SSH URL。

【讨论】:

  • 您可能错过了服务器在 Windows 上运行,而不是在 Linux 上运行(“在服务器上,我在 C:\Users\harry\.ssh\id_ed25519 中有相关的私钥”),所以第一个代码块对我不起作用.相反,我必须 ssh 服务器并在 ssh 控制台中运行 start-ssh-agent。使用 HTTPS URL 的替代方案对我也不起作用,因为正如我所说,我的私人仓库在 Gitea 上,而不是在 Github 上。而我使用的 gitea 服务器强制我使用 SSH 连接。
  • @jevgienij 正如docs.github.com/en/github/authenticating-to-github/… 中所见,这也适用于 Windows(在 Git bash 会话中)。 gitea 通常可以支持 HTTPS(我有一个在工作场所)。但确实不是你的情况。
  • 是的,在 git bash 会话中它可以工作,但是当我 ssh 到那台 PC 时,我不在 git bash 会话中,所以我必须改用 start-ssh-agent
  • @jevgienij 同意(我刚刚测试了那个案例)。这些天来,使用最近的 Windows 10,无论如何我都在 WSL2 Linux 会话中工作,所以所有 Windows/Linux 的边界往往有点模糊。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2020-08-29
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多