包刷新内容在“联系主机:elpa.gnu.org:80”处挂起

23

我正在运行通过Chocolatey安装的Windows版Emacs 24.4,尝试安装CIDER。

当我运行M-x package-install [RET] cider [RET]时,出现[No match]。当我运行M-x package-refresh-contents [RET]时,它卡在了联系主机:elpa.gnu.org:80上。

~/.emacs.d中填充了braveclojure.com建议的GitHub存储库(here)。我已经重新安装了Emacs,但仍然遇到相同的问题。


你等了多久让Emacs联系GNU ELPA? - Chris
不应该花费太长时间,但由于它是一个网络操作,所以有很多延迟或失败的机会。我偶尔会遇到与GNU ELPA联系困难的问题,但取消和重试对我来说通常有效。*消息*中有什么有趣的东西吗?由于您使用的是Windows,可能缺少一些库。我从未使用过Chocolately,但是官方GNU二进制文件效果非常好。 - Chris
@Chris Chocolatey从官方网站获取它(但为您提取所有内容),因此这是最新版本。 Messages没有显示任何奇怪的东西,取消和重试也没有帮助......有人提到elpa.gnu.org:80由于大量请求而有时太忙,并且可能会关闭一两天,但我不明白为什么它可以工作,例如M-x package-refresh-contents。 - Joshua Grosso Reinstate CMs
等等,你运行 M-x package-refresh-contents 时它能工作?那么你应该可以直接运行 M-x package-list-packages-no-fetch 并安装 cider,假设你已经配置了一个包含 CIDER 的软件包仓库。 - Chris
1
@MartinCleaver,我已添加了一个答案,总结了聊天的结果。 - Chris
显示剩余7条评论
6个回答

21

我在 emacs ELPA wiki 遇到了同样的问题,他们建议设置 ELPA 需要修改 emacs 初始文件,该文件位于 ~/.emacs_emacs~/.emacs.d/init.el。对于我来说,由于我的版本原因,初始文件是 ~/.emacs-live.el

我只需使用以下内容更新该文件:

(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                     ("marmalade" . "http://marmalade-repo.org/packages/")
                     ("melpa" . "http://melpa.org/packages/")))

看来我需要配置ELPA将要查找的软件包。

之后我只需运行M-x package-refresh-contents [RET]M-x package-install [RET] cider [RET],就可以安装cider了。



1
第一次就解决了我的问题。问题是,为什么需要这样做?为什么默认情况下它不起作用? - Donovan
我有emacs v24.5,只有在将package-archives添加到init.el中时才能正常工作。我还必须重新启动emacs才能使其正常工作。 - Varun Achar
2
由于SSL中的一个错误,您需要将marmalade设置为http而不是https。[ed] 不幸的是,如果第一次没有这样做,它会持续出现错误,说marmalade-repo.org:443无法工作,我还没有找到消除它的方法。 - Peter Flynn

3

在msys2上执行pacman -S mingw64/mingw-w64-x86_64-gnutls解决了这个问题。 - Emily L.
这虽然并不能完全解决问题,但确实能让emacs在此处停止挂起并提供有用的错误信息(这有助于确定问题)。我百分百推荐在Windows上使用emacs的任何人安装此补丁(确保在安装时复制现有文件)。 - ricardo

2
我在Ubuntu 16.04中使用Emacs 24时遇到了同样的问题,似乎没有什么可以解决这个问题。最后,安装Emacs 25解决了这个问题。
新的Emacs软件包可以在这里找到。
sudo add-apt-repository ppa:kelleyk/emacs
sudo apt-get update
apt-get install emacs27

问题在于 ELPA 软件包签名密钥已过期。新的 Emacs 版本将包含一个新的密钥。请注意,目前(2020 年 10 月)Ubuntu 16.04 可用 Emacs 27。

还要确保使用 https URL(而不是普通的 http)。

另一种可能性是在旧版本的 Emacs 上安装新的密钥。

Windows 二进制文件也可能会在某个地方提供。


1
除了设置软件包存档之外,就像之前的回答所提到的一样(值得一提的是,我直接使用HTTPS)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
                         ("marmalade" . "https://marmalade-repo.org/packages/")
                         ("melpa" . "https://melpa.org/packages/")))

你可能会遇到另一个问题,但症状相同,即在运行gpg以批处理模式验证软件包时卡在“联系主机”上,但需要一些输入。您可以通过以下方式禁用:

(setq package-check-signature nil)

0

Stack Overflow 有时会删除聊天记录。幸运的是,我似乎仍然可以访问只读版本的记录。

从我的角度来看,我们没有得到一个令人满意的答案。以下是要点:

  1. 我们确定变量package-archives仅包含GNU ELPA

  2. 在发现这一点后,OP写道

    我编辑了package.el文件。它有效了!

  3. 我建议编辑核心Emacs Lisp文件不是一个好的解决方案,但没有收到OP的回复。

    由于引用的init.el文件试图添加MELPA,我认为还有其他问题。例如,.emacs.d/目录可能位于错误的位置。

编辑 package.el 绝非良策。更好的方法是花些功夫弄明白为何配置未被正确加载。


潜在的问题似乎是由于某些未知的错误或缺失设施而导致机制被破坏。在Windows 7下,我使用GNU的emacs-24.4-bin-i686-pc-mingw32.zip进行了新下载和安装,但它在“联系主机:elpa.gnu.org:80”处挂起。当我在Ubuntu 15.04下尝试相同的M-x package-refresh-contents命令时,它完美地工作。 - Peter Flynn

0

我在Emacs 24.5.1上遇到了这个问题。
我在Stack Overflow和其他地方搜索过,但都没有解决。最终我只能通过安装更新版本的Emacs:emacs25来规避这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接