Bazaar 如何决定使用哪种 Python?

Bazaar 如何决定使用哪种 Python?

我在 OS X 10.8 上。我的系统中的 Python/usr/bin是 2.7.2 版。我犯了一个错误(?),通过 Homebrew 安装了另一个版本的 Python,2.7.3。该版本链接自/usr/local/bin。我的 PYTHONPATH 指向后者;具体来说PYTHONPATH=/usr/local/bin:。对吗?

无论如何,bzr --version输出

Bazaar (bzr) 2.6b2
Python interpreter: /usr/bin/python2.6 2.6.7
Python standard library: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
Platform: Darwin-12.2.1-x86_64-i386-64bit
bzrlib: /Library/Python/2.6/site-packages/bzrlib
Bazaar configuration: /Users/adam/.bazaar
Bazaar log file: /Users/adam/.bzr.log
...

Bazaar 怎么能找到 2.6.7,我怎么才能将它指向 Homebrew 版本?我以为 PYTHONPATH 就是用来干这个的。问题是我通过 Homebrew 和 pip 安装了 Python 模块,但 Bazaar 找不到它们。最终,我想做的是通过 fastimport 将 Bazaar 共享存储库转换为 Git,但那是另一个问题...

答案1

首先,请注意 10.8 附带 2.5、2.6 和 2.7,均可作为/usr/bin/python2.*

接下来,如何安装Bazaar?

我猜你安装了一个二进制包,并且它是专门打包以供依赖的,/usr/bin/python2.6因为该版本存在于所有 OS X 10.5+ 版本中,或者因为这是他们测试过的,或者......无论如何。

(您也可能通过,easy_install-2.6或者一些间接等效的方式来安装它。但这似乎是一件愚蠢的事情。)

如果您希望 Bazaar 使用您通过 Homebrew 安装的软件包,您可能需要使用 Homebrew 本身或pipHomebrew 的 Python 来安装 Bazaar。


从评论中,您说您模糊地记得运行过 Canonical 的安装程序。作为他们的Mac OS X 下载和安装页面明确指出,您下载的是“Snow Leopard (10.6 - Python 2.6)”。 (此外,鉴于您使用的是 2.6b1,因此您下载的是“测试”版本而不是稳定版本。) 页面甚至显示:

在某些时候,安装程序将能够使用 2.7,但目前这是让 Bazaar 与 Lion 一起工作的最简单方法。

所以,这一切都记录得很清楚。他们的安装程序使用 Apple 的系统 Python,并且特别针对 OS X 10.6+ 使用 2.6。


由于 Bazaar 是纯 Python 代码,因此它找到 2.6 的方式很简单:第一行/usr/local/bin/bzr如下所示:

#!/usr/bin/python2.6

或者:

#!/usr/bin/env python2.6

你可以把它改成,比如说#!/usr/local/bin/python2.7。但这是个很糟糕的主意。你已经安装并配置了一些东西来对抗一个 Python,你不想尝试在另一个 Python 上运行它。(因为它是纯 Python 代码,它将大多工作,但有时会以神秘的方式失败,这可能比使用 C 扩展或嵌入的代码更糟糕,后者可能会立即失败。)

答案2

$PYTHONPATH用于指定额外的 Python 库的位置(与添加 Python 的路径非常相似sys.path),而不是 Python 解释器本身。我猜你的系统正在选择 Python 的版本,它首先出现在 中$PATH

可能是你安装了另一个版本的 Python,该版本是从中提取的$PATH

您可以运行which python来找出正在使用的确切的 python 二进制文件。

答案3

我为 Bazaar 构建了官方 Mac OS X 安装程序包。不过,我并不是 Canonical 的员工。

如果您使用的是从 Canonical 网站下载的 Bazaar 安装程序包,那么它是专门针对 Python 2.6 构建的,并且 bzr 脚本/usr/bin/python2.6在其标头中使用它来确保使用 Python 2.6 调用它。当我构建安装程序时,有一些本机 Python 扩展是针对 Python 2.6 编译的,因此使用另一个主要版本的 Python 运行它可能无法工作(我从未尝试过)。

相关内容