HomeBrew 与 Debian GNU/Linux 兼容吗?

Int*_*rer 2 python debian homebrew beagleboneblack

我有一个 BeagleBone Black 板。操作系统是Debian GNU/Linux 9. 可以用HomeBrew 安装Python吗?还是 HomeBrew 仅适用于 Mac OS?

Cha*_*lie 12

让我们从问题的最后一部分开始:

还是 HomeBrew 仅适用于 Mac OS?

Stack Overflow 的时间戳显示这个问题是在 2019 年 3 月 7 日提出的。在此之前不久,一个合理的答案应该是,“是的,Homebrew 适用于 macOS,但 Linuxbrew 是 Homebrew 的一个分支,它的名字是什么暗示:修改 Homebrew 以在 Linux 上工作”。

然而,在 2019 年 2 月 2 日——在提出这个问题的一个多月前——Homebrew 宣布了 2.0.0 版本。在他们博客的公告中,他们用这句话开场:

今天我要宣布 Homebrew 2.0.0。自 1.9.0 以来最显着的变化是对 Linux 和 Windows 10(带有适用于 Linux 的 Windows 子系统)的官方支持、自动运行的 brew cleanup、Homebrew/homebrew-core 中没有更多选项以及取消对 OS X Mountain Lion (10.8) 的支持) 及以上。

并进一步解释:

Linux 上的 Homebrew 以前称为“Linuxbrew”。您可以将它安装在您的主目录中,因此它不需要 sudo,并使用它来安装您的主机发行版的包管理器不提供的软件。Linux 上的 Homebrew 使用自己的公式存储库:Homebrew/linuxbrew-core

https://brew.sh/2019/02/02/homebrew-2.0.0/

然后,在 2019 年 2 月 20 日,这条消息的 README.md 文件被添加到 Linuxbrew github 存储库根目录下的 README.md 文件的顶部:

Linuxbrew 已合并到 Homebrew

Linuxbrew/brew 已合并到 Homebrew/brew 中!现有的 Linuxbrew 安装将自动迁移到 Homebrew。Linuxbrew/brew 将不再更新。请参阅LinuxbrewHomebrew 文档和 Homebrew 2.0.0博客文章

https://github.com/Linuxbrew/brew/pull/942/files

简而言之,是的。在发布此问题之前不久,Homebrew 正式支持 Linux。问题中提到的特定发行版 Debian GNU/Linux 版本 9 包含在其中。但是在你可以使用它来安装 python 之前,你很可能需要安装 Homebrew 本身,因为默认情况下它没有安装在 Debian 系统上。

Debian 9 甚至包括一个“linuxbrew-wrapper”包,它在 linuxbrew 被合并到 homebrew 之前就已经构建好了。

https://packages.debian.org/stretch/linuxbrew-wrapper

考虑到 linuxbrew 合并回自制软件,它现在能正常工作吗?好吧,我面前有一个最新的 Debian 9 VM,让我们试一试:

$ sudo apt install linuxbrew-wrapper
[...]
The following additional packages will be installed:
  fonts-lato libruby2.3 rake ruby ruby-did-you-mean ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit
  ruby2.3 rubygems-integration zip
Suggested packages:
  ri ruby-dev bundler
The following NEW packages will be installed:
  fonts-lato libruby2.3 linuxbrew-wrapper rake ruby ruby-did-you-mean ruby-minitest ruby-net-telnet ruby-power-assert
  ruby-test-unit ruby2.3 rubygems-integration zip
0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded.
Need to get 6,447 kB of archives.
After this operation, 27.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
[...]
$ 
Run Code Online (Sandbox Code Playgroud)

所以现在安装了吗?让我们问dpkg:

$ dpkg --status linuxbrew-wrapper
Package: linuxbrew-wrapper
Status: install ok installed
[...]
Description: Homebrew package manager for Linux
 Linuxbrew is a fork of Homebrew, the Mac OS package manager, for Linux.
[...]
 This package provides Linuxbrew install scripts instead of linuxbrew itself.
Homepage: http://linuxbrew.sh/
Run Code Online (Sandbox Code Playgroud)

所以它安装了这个包,但这个包是一个带有安装脚本的“包装器”,而且这个包仍然有旧的 linuxbrew 描述。如果我们尝试运行会发生什么brew

$ type brew
brew is /usr/bin/brew
$ brew

========================================================================
For the convenience of using linuxbrew it is recommended to update the
following environment variables after installing linuxbrew.

  PATH, MANPATH, INFOPATH 

Set HOMEBREW_BOTTLE_DOMAIN environment variable if you prefer some
homebrew mirror as your upstream.

(example: /usr/share/doc/linuxbrew-wrapper/examples/profile)
========================================================================
==> This script will install:
/home/parallels/.linuxbrew/bin/brew
/home/parallels/.linuxbrew/Library/...
/home/parallels/.linuxbrew/share/doc/homebrew
/home/parallels/.linuxbrew/share/man/man1/brew.1
/home/parallels/.linuxbrew/share/zsh/site-functions/_brew
/home/parallels/.linuxbrew/etc/bash_completion.d/brew
/home/parallels/.cache/Homebrew/

Press RETURN to continue or any other key to abort
==> Downloading and installing Linuxbrew...
[...]
==> Migrating from Linuxbrew/brew to Homebrew/brew
  Linuxbrew/brew has been merged into Homebrew/brew!
  Linuxbrew/brew will no longer be updated.
  Your git remote has been changed from
     https://github.com/Linuxbrew/brew
  to https://github.com/Homebrew/brew
  See the blog post at https://brew.sh/2019/02/02/homebrew-2.0.0/
Updating Homebrew...
[...]
==> Tapping homebrew/core
Cloning into '/home/parallels/.linuxbrew/Library/Taps/homebrew/homebrew-core'...
[...]
Warning: /home/parallels/.linuxbrew/bin is not in your PATH.
==> Installation successful!
==> Next steps
Install the Linuxbrew dependencies:

Debian, Ubuntu, etc.:
  `sudo apt-get install build-essential`

Fedora, Red Hat, CentOS, etc.:
  `sudo yum groupinstall 'Development Tools'`

See http://linuxbrew.sh/#dependencies for more information.

Add to your ~/.bash_profile by running
  echo 'export PATH="/home/parallels/.linuxbrew/bin:$PATH"' >>~/.bash_profile
  echo 'export MANPATH="/home/parallels/.linuxbrew/share/man:$MANPATH"' >>~/.bash_profile
  echo 'export INFOPATH="/home/parallels/.linuxbrew/share/info:$INFOPATH"' >>~/.bash_profile

We recommend you install GCC by running `brew install gcc`.
Run `brew help` to get started
Further documentation: https://git.io/brew-docs
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics
Homebrew 2.0.6
Homebrew/linuxbrew-core (git revision 69e4; last commit 2019-03-31)
Run Code Online (Sandbox Code Playgroud)

很酷,它会自动更新自己以从 Linuxbrew 过渡到 Homebrew。值得注意的是,它仍然使用目录名称~/.linuxbrew来保存其文件。我们需要做的就是在安装中完成:

  • 安装安装输出中提到的任何 apt 依赖项。Homebrew 从源代码构建东西,你的 Linux 发行版可以提供它想要的大部分开发工具链。

  • 更新一些“路径”环境变量。Homebrew 正在为已安装的软件在文件系统上添加一个新位置,与 /bin 和 /usr/bin 等位置分开,因为您的操作系统包管理器管理这些目录的内容。将 Homebrew 的安装位置添加到这些路径中可以找到安装了 Hombrew 的软件。

  • brew install gcc. 虽然他们要求您的操作系统提供大部分开发工具链,但他们显然认为要求您安装 brew 管理的编译器很重要。这是有道理的,因为您的机器用来构建其他自制公式的编译器可能与他们发布这些公式时正在测试的编译器同步。

原来的问题还问:

可以用 HomeBrew 安装 Python 吗?

让我们试试看:

$ brew install python
==> Installing dependencies for python: patchelf, pkg-config, gdbm, openssl, gpatch, ncurses, readline, sqlite, xz, bzip2, libffi and zlib
[...]
==> Installing python
==> Downloading https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
[...]
==> Caveats
Python has been installed as
  /home/parallels/.linuxbrew/bin/python3
[...]
See: https://docs.brew.sh/Homebrew-and-Python
[...]
parallels@debian-gnu-linux-vm:~$
Run Code Online (Sandbox Code Playgroud)

看起来你可以!

那么,当您可以使用 apt 安装 python 时,您为什么还要费心使用 Homebrew 来安装 python?好吧,围绕这样的问题进行了全面的讨论和辩论,但这是简短的答案......

apt安装的python:

$ /usr/bin/python3 --version
Python 3.5.3
Run Code Online (Sandbox Code Playgroud)

homebrew 安装的python:

$ ~/.linuxbrew/bin/python3 --version
Python 3.7.3
Run Code Online (Sandbox Code Playgroud)

3.7.3 是我写这篇文章时的当前 python 版本。Apt 管理的软件包以数月或数年的时间尺度更新。Homebrew 管理的软件包在几天或几小时的时间尺度上更新。

为什么我们会看到 apt 和 homebrew 之间的巨大差异?将自制软件视为提供一个分层系统,该系统位于 apt 提供的系统之上。许多操作系统级实用程序都依赖于 apt 管理的 python 安装,Debian 团队正在小心翼翼地避免破坏它们。但也许您正在开发一些需要新功能的东西,只有最新的 Python 版本才有。这就是 Homebrew 旨在解决的问题。