Как Bazaar решает, какой Python использовать?

983
Metaphile

Я на OS X 10.8. Моя система Python в /usr/binверсии 2.7.2. Я сделал ошибку (?), Установив другую версию Python, 2.7.3, через Homebrew. Это связано с /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. Проблема в том, что я установил модули Python через Homebrew и pip, и Bazaar не может их найти. В конечном итоге я пытаюсь преобразовать общий репозиторий Bazaar в Git с помощью fastimport, но это другой вопрос ...

0
Как вы установили Bazaar? 11 лет назад 0
Я также установил Bazaar через Homebrew. Metaphile 11 лет назад 0
Как вы установили его через Homebrew? Если вы только что сделали brew install bazaar без аргументов, вы делали это до или после установки Homebrew Python? 11 лет назад 0
Также, со свежим обновленным Homebrew, `brew info bazaar` сообщает мне` bazaar: stable 2.5.1`. Но у вас есть 2.6b2. Вы уверены, что установили его через Homebrew? 11 лет назад 0
Я только что проверил и / usr / local / bin / bzr НЕ является символической ссылкой, как это было бы после успешной установки Homebrew. Так что это определенно было частью моей проблемы. Теперь, когда я думаю об этом, я смутно помню, как когда-то в прошлом использовал установщик Canonical. Чувак, что за день ... Хорошо, поэтому я переустановил Bazaar через Homebrew и заставил шаг связывания, и ... я вернусь с тобой всего через секунду. Metaphile 11 лет назад 0
Да, это была проблема. (-_-;) Metaphile 11 лет назад 0

3 ответа на вопрос

2
abarnert

First, notice that 10.8 comes with 2.5, 2.6, and 2.7, all available as /usr/bin/python2.*.

Next, how did you install Bazaar?

I'm guessing you installed a binary package, and it was specifically packaged to rely on /usr/bin/python2.6 because that version is there in all OS X 10.5+ versions, or because that's what they tested on, or… whatever.

(It's also possible you installed it via, say, easy_install-2.6, or some indirect equivalent of the same thing. But that seems like a silly thing to do.)

If you want Bazaar to use packages you've installed via Homebrew, you're probably going to want to use either Homebrew itself, or the pip from Homebrew's Python, to install Bazaar.


From a comment, you said you vaguely remember running the installer from Canonical. As their Mac OS X Downloads and Installation page makes clear, what you downloaded is for "Snow Leopard (10.6 - Python 2.6)". (Also, you downloaded the "Test" version instead of the stable, given that you have 2.6b1.) It even says:

At some point the installer will be able to use 2.7 but for now this is the easiest way to get Bazaar working with Lion.

So, this is all documented pretty clearly. Their installer uses Apple's system Python, and specifically uses 2.6 for OS X 10.6+.


Since Bazaar is pure Python code, the way it's finding 2.6 is simple: The first line of /usr/local/bin/bzr is something like this:

#!/usr/bin/python2.6 

or:

#!/usr/bin/env python2.6 

You could hack that up to, say, #!/usr/local/bin/python2.7. But that's a very bad idea. You've got something that installed and configured itself against one Python, you don't want to try to run it against another. (Since it's pure Python code, it will mostly work, but sometimes fail in mysterious ways, which is probably worse than code that uses C extensions or embedding which will probably just fail immediately.)

1
Tuxdude

$PYTHONPATH is used to specify the location of extra python libraries (very similar to adding the path to python's sys.path) and not the python interpreter itself. I'm guessing your system is picking up the version of python, which is found first in $PATH.

It might be that you have another version of Python installed which gets pulled from $PATH.

You can run which python to figure out the exact python binary which is being used.

Крайне маловероятно, что `/ usr / bin / python2.6` является самой высокой вещью на его пути как` python`. OS X поставляется с `/ usr / bin / python` в качестве бинарной оболочки, которая в конечном итоге указывает на ту же установку, что и` / usr / bin / python2.7`. Кроме того, `which python` не может вернуть` / usr / bin / python2.6`. 11 лет назад 0
Существует также «update-alternatives», который используется для поддержки нескольких версий одного и того же пакета, который не является бинарной оберткой, а просто использует символические ссылки для выбора правильной версии бинарного файла. Tuxdude 11 лет назад 0
`update-alternatives` - это Debian-ism; он не существует в OS X или других Unixes, или даже во многих строках, не основанных на Debian. Кроме того, OS X не использует символические ссылки для выбора правильного Python. Опять же, `/ usr / bin / python` - это всегда двоичная оболочка, которая выбирает правильный фактический двоичный файл из / System / Frameworks (который должен быть Apple 2.7, поэтому я не уверен, почему они обеспокоены этим, но вот что оно делает). Ваша информация не имеет значения и вводит в заблуждение. 11 лет назад 1
@abarnert - Да, я думаю, вы правы насчет того, что альтернативы обновления отсутствуют в OSX, и, похоже, не заметили, что в OP говорилось об OSX (о котором я почти ничего не знаю). Tuxdude 11 лет назад 0
Вы не замечали, чтобы он говорил об использовании Homebrew вместо apt, или не думал что-нибудь странное о том, что библиотеки находятся в «каркасах» или имеют пути внутри / System / Library или что-то еще? 11 лет назад 1
@ Tuxdude Как насчет первой строки, где я упоминаю, что я на OS X 10.8? ; D Metaphile 11 лет назад 1
1
dOxxx

Я создаю официальные установочные пакеты для Mac OS X для Bazaar. Тем не менее, я не работаю в Canonical.

Если вы используете установочный пакет Bazaar, загруженный с веб-сайта Canonical, то он создан специально для Python 2.6, а скрипт bzr использует /usr/bin/python2.6в своем заголовке, чтобы он вызывался с Python 2.6. Существуют некоторые собственные расширения Python, которые скомпилированы для Python 2.6 при сборке установщика, поэтому запуск его с другой основной версией Python может не сработать (я никогда не пробовал).