Wie entscheidet Bazaar, welcher Python verwendet werden soll?

1084
Metaphile

Ich bin auf OS X 10.8. Mein Python-System /usr/binist Version 2.7.2. Ich habe den Fehler gemacht (?), Eine andere Version von Python, 2.7.3, über Homebrew zu installieren. Das ist von verlinkt /usr/local/bin. Mein PYTHONPATH zeigt auf Letzteres; speziell PYTHONPATH=/usr/local/bin:. Ist das richtig?

In jedem Fall bzr --versionAusgänge

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 ... 

Wie findet Bazaar sogar 2.6.7 und wie kann ich es auf die Homebrew-Version verweisen? Ich dachte, dafür wäre PYTHONPATH. Das Problem ist, dass ich Python-Module über Homebrew und Pip installiert habe und Bazaar sie nicht finden kann. Letztendlich versuche ich, ein Bazaar-Repo in Git über fastimport zu konvertieren, aber das ist eine andere Frage ...

0
Wie haben Sie Bazaar installiert? vor 11 Jahren 0
Ich habe Bazaar auch über Homebrew installiert. Metaphile vor 11 Jahren 0
Wie haben Sie es über Homebrew installiert? Wenn Sie einfach `brew install bazaar` ohne Argumente gemacht haben, haben Sie dies vor oder nach der Installation von Homebrew Python getan? vor 11 Jahren 0
Bei einem frisch aktualisierten Homebrew sagt mir 'brew info bazaar' `bazaar: stable 2.5.1`. Aber du hast 2.6b2. Sind Sie sicher, dass Sie es überhaupt über Homebrew installiert haben? vor 11 Jahren 0
Ich habe gerade nachgesehen und / usr / local / bin / bzr ist KEIN Symlink wie nach einer erfolgreichen Homebrew-Installation. Das war also definitiv ein Teil meines Problems. Jetzt, wo ich darüber nachdenke, erinnere ich mich vage daran, den Canonical-Installer einmal in der Vergangenheit verwendet zu haben. Mann, was für ein Tag ... OK, also habe ich Bazaar über Homebrew neu installiert und den Verknüpfungsschritt erzwungen und ... Ich komme in einer Sekunde mit Ihnen zurück. Metaphile vor 11 Jahren 0
Ja, das war das Problem. (-_-;) Metaphile vor 11 Jahren 0

3 Antworten auf die Frage

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.

Es ist unglaublich unwahrscheinlich, dass `/ usr / bin / python2.6` das Höchste auf seinem Weg als` Python` ist. OS X wird mit `/ usr / bin / python` als binärer Wrapper geliefert, der letztendlich auf dieselbe Installation wie` / usr / bin / python2.7` verweist. Außerdem konnte "which python" unmöglich "/ usr / bin / python2.6" zurückgeben. vor 11 Jahren 0
Es gibt auch "Update-Alternativen", mit denen mehrere Versionen desselben Pakets verwaltet werden. Dabei handelt es sich nicht exakt um einen Binär-Wrapper, sondern es wird lediglich über Symlinks die richtige Version einer Binärdatei ausgewählt. Tuxdude vor 11 Jahren 0
"Update-alternatives" ist ein Debian-Ismus. Es existiert nicht unter OS X oder anderen Unixen oder sogar vielen nicht auf Debian basierenden Zeilen. OS X verwendet auch keine Symlinks, um den richtigen Python auszuwählen. `/ Usr / bin / python` ist wiederum immer ein binärer Wrapper, der die richtigen Binärdateien aus / System / Frameworks auswählt (was Apples 2.7 sein muss, also bin ich mir nicht sicher, warum sie sich damit beschäftigt haben, aber das ist was es tut). Ihre Informationen sind irrelevant und irreführend. vor 11 Jahren 1
@abarnert - Ja, ich denke, Sie haben Recht, dass Update-Alternativen nicht unter OSX vorhanden sind. Sie haben anscheinend nicht bemerkt, dass das OP über OSX sprach (wovon ich kaum weiß). Tuxdude vor 11 Jahren 0
Sie haben nicht bemerkt, dass er über Homebrew statt über apt sprach oder dass Sie etwas seltsam dachten, dass Bibliotheken in "Frameworks" sind oder Pfade in / System / Library oder einem der anderen enthalten sind? vor 11 Jahren 1
@Tuxdude Wie wäre es mit der ersten Zeile, in der ich erwähne, dass ich unter OS X 10.8 bin? ; D Metaphile vor 11 Jahren 1
1
dOxxx

Ich baue die offiziellen Installationspakete für Mac OS X für Bazaar. Ich bin jedoch nicht bei Canonical beschäftigt.

Wenn Sie das von der Canonical-Website heruntergeladene Bazaar-Installationspaket verwenden, wurde es speziell für Python 2.6 entwickelt und das bzr-Skript /usr/bin/python2.6in seinem Header verwendet, um sicherzustellen, dass es mit Python 2.6 aufgerufen wird. Es gibt einige native Python-Erweiterungen, die gegen Python 2.6 kompiliert werden, wenn ich das Installationsprogramm baue. Das Ausführen mit einer anderen Hauptversion von Python funktioniert möglicherweise nicht (ich habe es noch nie versucht).