当我升级到 Bionic 时,Ruby 从其默认的 Xenial 版本 2.3 升级到了其默认的 Bionic 版本 2.5。这意味着我通过 Ruby gem 安装的程序gem install
不再起作用,并且gem uninstall
也无法工作,因为它无法找到 Ruby 2.3 并退出。
我知道在 Ubuntu 上使用 gem 安装 Ruby 不是一个好习惯库您需要进行开发,而我没有,但是我已经用它来安装以这种方式分发的可执行程序。
(我今后的打算是针对此类情况使用checkinstall
和/或 PPA;我现在知道得更多了。但这个问题是关于清理的。)
举个例子,现在我有一个无法执行的 Rubygem 版本github-linguist
,它的主要可运行版本安装在/usr/local/bin/linguist。我可以安装新的 Bionic apt 包ruby-github-linguist
,除了安装到/usr/bin
而不是之外/usr/local/bin
,它还会将其可执行文件安装在名称github-linguist
和之下git-linguist
,而旧的 Rubygem 则安装在linguist
和git-linguist
(它们是两个不同的程序,新的github-linguist
对应于旧的linguist
)。
因此,我不仅遇到了名称冲突(并且由于各种原因,我将其放在了 PATH/usr/local/bin
之前/usr/bin
),而且旧版本/usr/local/bin
也无法执行,并且gem uninstall
也会失败。
正如我所说的,我已经吸取了教训,希望通过首先将此类程序(以及类似的基于 Pythoneasy_install
的程序或 Golang 程序)在我的 PPA 中制作成 APT,当我从 Bionic 升级时就不必处理这个问题。
但是现在,我的系统上已经有了这个无用的东西(充其量)。我该如何从系统中删除这个和其他 Bionic Ruby 2.3 之前的 gem?
easy_install
(我意识到对于使用 Python 、Go go get
、Haskell cabal install
、Node等安装的可执行文件,答案几乎肯定不同npm -i
——但如果有一个可以在这些情况下使用的单一工具或策略,那就更好了。)
答案1
当您更改ruby
版本时,您应该始终运行gem pristine --extensions
以重新编译 C 扩展。这可能有助于在新版本的 ruby 下使用您的旧 gem。您试过吗?
如果你希望卸载旧的 gems,请检查卸载旧版本的 Ruby gems在 Stack Overflow 上。
否则,在 Ubuntu 下有两种方法可以管理多个ruby
版本并选择默认版本:
1)使用 Ubuntu折断而不是 Apt - 它允许你选择安装哪个版本,最新版本或任何以前的版本。请参阅官方 Ruby snap 现已发布在 Ruby.org 网站上发布说明。为了避免可能的冲突,您可能需要apt
先运行以下命令卸载现有安装的版本
sudo apt remove ruby && sudo apt autoremove
使用 安装的主要优势snap
是 Ruby.org 和 Ubuntu 均提供官方支持。您可以降级或升级要使用的版本。首先运行snap info ruby
以列出所有可用版本(当前为 2.3 到 2.7),然后按照上面链接的说明选择要安装的版本(多个版本可以共存)并在它们之间切换。
2)如果你更喜欢使用 Debian 的 Apt 包管理工具,你可以依赖 Brightbox PPA适用于 Ubuntu 的 Ruby 软件包这为您提供了几乎相同的选择(目前,他们尚未提供最新的 2.7 版本)。在这里,您必须依赖 Brightbox 继续为 Ubuntu 提供优化的 Ruby 包,就像他们多年来所做的那样。他们目前正在维护 Ruby 2.6、2.5、2.4、2.3、2.2、2.1、2.0、1.9.3 和 1.8.7 的包,您还可以在这些版本之间来回切换默认的 Ruby 版本。