Was ist die kompatibelste Methode, um Python-Module auf einem Mac zu installieren?

125

Ich fange an, Python zu lernen und es zu lieben. Ich arbeite hauptsächlich auf einem Mac sowie unter Linux. Ich finde, dass unter Linux (meistens Ubuntu 9.04), wenn ich ein Python-Modul mit apt-get installiere, es gut funktioniert. Ich kann es ohne Probleme importieren.

Auf dem Mac bin ich es gewohnt, mit Macports alle Unixy-Inhalte zu installieren. Ich stelle jedoch fest, dass die meisten Python-Module, die ich damit installiere, von Python nicht gesehen werden. Ich habe einige Zeit damit verbracht, mit den PATH-Einstellungen herumzuspielen und python_select zu verwenden. Nichts hat wirklich funktioniert und an diesem Punkt verstehe ich nicht wirklich, stattdessen stöbere ich nur herum.

Ich habe den Eindruck, dass Macports für die Verwaltung von Python-Modulen nicht allgemein beliebt ist. Ich würde gerne mit einem "akzeptierten" Ansatz (wenn das das richtige Wort ist) neu anfangen.

Ich habe mich gefragt, mit welcher Methode Mac-Python-Entwickler ihre Module verwalten.

Bonusfragen:

Verwenden Sie Apples Python oder eine andere Version? Kompilieren Sie alles aus dem Quellcode oder gibt es einen Paketmanager, der gut funktioniert (Fink?).

GloryFish
quelle
7
MacPorts ist perfekt für Python auf dem Mac. HINWEIS: Sie müssen die Python-Pakete über MacPorts installieren, damit sie in Ihre MacPorts Python-Installation installiert werden können. Sie können Pakete auch ohne MacPorts installieren. Sie müssen diese Python-Version jedoch vor der Installation des Pakets über python_select als Standardversion festlegen. Wenn Sie das Paket installieren und dann python_select verwenden, spielt dies keine Rolle, da es in der Version von Python installiert wurde, die zum Zeitpunkt der Installation die Standardeinstellung war.
Michael Aaron Safyan

Antworten:

144

Die beliebteste Methode zum Verwalten von Python-Paketen (wenn Sie Ihren Systempaket-Manager nicht verwenden) ist die Verwendung von setuptools und easy_install. Es ist wahrscheinlich bereits auf Ihrem System installiert. Verwenden Sie es so:

easy_install django

easy_install verwendet den Python- Paketindex , eine erstaunliche Ressource für Python-Entwickler. Schauen Sie sich um, welche Pakete verfügbar sind.

Eine bessere Option ist pip , das an Zugkraft gewinnt, da es versucht, viele der mit easy_install verbundenen Probleme zu beheben. Pip verwendet dasselbe Paket-Repository wie easy_install, es funktioniert einfach besser. Wirklich die einzige Zeit, die zur Verwendung von easy_install benötigt wird, ist für diesen Befehl:

easy_install pip

Verwenden Sie danach:

pip install django

Irgendwann werden Sie wahrscheinlich etwas über virtualenv lernen wollen . Wenn Sie viel Python für Projekte mit widersprüchlichen Paketanforderungen entwickeln, ist virtualenv ein Glücksfall. Auf diese Weise können Sie völlig unterschiedliche Versionen verschiedener Pakete verwenden und je nach Bedarf problemlos zwischen diesen wechseln.

In Bezug auf die zu verwendende Python werden Sie am wenigsten Kopfschmerzen haben, wenn Sie sich an Apples Python halten. Wenn Sie jedoch eine neuere Version benötigen (Leopard ist 2.5.1, glaube ich), würde ich mich für die Macports- Python 2.6 entscheiden.

Sechster Gang
quelle
5
Ich habe kürzlich meine Maschine umgebaut und auf Homebrew und PIP umgestellt. Plötzlich sind alle Build-Probleme, die ich hatte, verschwunden.
GloryFish
42

Ihre Frage ist bereits drei Jahre alt und es gibt einige Details, die in anderen Antworten nicht behandelt werden:

Die meisten Leute, die ich kenne, verwenden HomeBrew oder MacPorts . Ich bevorzuge MacPorts, da die Standardumgebung für Mac OS X und mein Entwicklungssetup sauber sind. Verschieben Sie einfach Ihren Ordner / opt und testen Sie Ihre Pakete mit einer normalen Python-Benutzerumgebung

MacPorts ist nur innerhalb von Mac portierbar, aber mit easy_install oder pip lernen Sie, wie Sie Ihre Umgebung auf jeder Plattform (Win / Mac / Linux / Bsd ...) einrichten. Darüber hinaus wird es immer aktueller und mit mehr Paketen sein

Ich persönlich überlasse MacPorts meine Python-Module, um alles auf dem neuesten Stand zu halten. Wie jeder andere High-Level-Paketmanager (dh apt-get) ist es viel besser für das schwere Heben von Modulen mit vielen binären Abhängigkeiten. Ich würde meine Qt-Bindungen (PySide) auf keinen Fall mit easy_install oder pip erstellen. Qt ist riesig und erfordert viel Kompilierung. Versuchen Sie, easy_install oder pip zu vermeiden, sobald Sie ein Python-Paket benötigen, das eine Bibliothek benötigt, die von Nicht-Python-Programmen verwendet wird

Irgendwann werden Sie feststellen, dass in MacPorts einige Pakete fehlen. Ich glaube nicht, dass MacPorts Ihnen jemals den gesamten CheeseShop geben wird . Zum Beispiel brauchte ich kürzlich das Elixir- Modul, aber MacPorts bietet nur py25-Elixir und py26-Elixir an, keine py27-Version. In solchen Fällen haben Sie:

pip-2.7 installiere --user elixir

(Stellen Sie sicher, dass Sie immer pip- (Version) eingeben.)

Dadurch wird eine zusätzliche Python-Bibliothek in Ihrem Home-Verzeichnis erstellt. Ja, Python funktioniert mit mehr als einem Bibliotheksverzeichnis: einem von MacPorts gesteuerten und einem lokalen Benutzer für alles, was in MacPorts fehlt.

Beachten Sie jetzt, dass ich pip gegenüber easy_install bevorzuge. Es gibt einen guten Grund, warum Sie setuptools und easy_install vermeiden sollten. Hier ist eine gute Erklärung und ich versuche, mich von ihnen fernzuhalten. Eine sehr nützliche Funktion von pip besteht darin, Ihnen eine Liste aller Module (zusammen mit ihren Versionen) zu geben, die Sie mit MacPorts, easy_install und pip selbst installiert haben:

pip-2.7 einfrieren

Wenn Sie bereits mit easy_install begonnen haben, machen Sie sich keine Sorgen, pip kann alles erkennen, was bereits von easy_install erledigt wurde, und sogar die damit installierten Pakete aktualisieren.

Wenn Sie ein Entwickler sind, behalten Sie virtualenv im Auge, um verschiedene Setups und Kombinationen von Modulversionen zu steuern. Andere Antworten erwähnen es bereits. Was bisher nicht erwähnt wurde, ist das Tox- Modul, ein Tool zum Testen, ob Ihr Paket mit verschiedenen Python-Versionen korrekt installiert ist.

Obwohl ich normalerweise keine Versionskonflikte habe, möchte ich virtualenv haben, um eine saubere Umgebung einzurichten und einen klaren Überblick über meine Paketabhängigkeiten zu erhalten. Auf diese Weise vergesse ich nie irgendwelche Abhängigkeiten in meiner setup.py

Wenn Sie sich für MacPorts entscheiden, beachten Sie, dass mehrere Versionen desselben Pakets nicht mehr wie im alten Debian-Stil mit einem zusätzlichen python_select-Paket ausgewählt sind (es ist aus Kompatibilitätsgründen immer noch vorhanden). Jetzt haben Sie den Befehl select, mit dem Sie auswählen können, welche Python-Version verwendet werden soll (Sie können sogar die von Apple installierten auswählen):

$  port select python
Available versions for python:
    none
    python25-apple
    python26-apple
    python27 (active)
    python27-apple
    python32

$ port select python python32

Fügen Sie Tox hinzu und Ihre Programme sollten wirklich portabel sein

SystematicFrank
quelle
30

Weitere Informationen finden Sie in der Python OS X-Entwicklungsumgebung . Am besten verwenden Sie MacPorts . Laden Sie MacPorts herunter und installieren Sie es. Installieren Sie dann Python über MacPorts, indem Sie die folgenden Befehle in das Terminal eingeben:

sudo port install python26 python_select
sudo port select --set python python26

ODER

sudo port install python30 python_select
sudo port select --set python python30

Verwenden Sie den ersten Befehlssatz, um Python 2.6 zu installieren, und den zweiten Satz, um Python 3.0 zu installieren. Dann benutze:

sudo port install py26-packagename

ODER

sudo port install py30-packagename

Ersetzen Sie in den obigen Befehlen den Paketnamen durch den Namen des Pakets, zum Beispiel:

sudo port install py26-setuptools

Diese Befehle installieren automatisch das Paket (und seine Abhängigkeiten) für die angegebene Python-Version.

Geben Sie Folgendes ein, um eine vollständige Liste der verfügbaren Pakete für Python anzuzeigen:

Portliste | grep py26-

ODER

Portliste | grep py30-

Welchen Befehl Sie verwenden, hängt davon ab, welche Python-Version Sie installiert haben.

Michael Aaron Safyan
quelle
1
Für die Aufzeichnung wurde in neueren Versionen von MacPorts sudo python_select python30durch ersetzt sudo port select --set python python30.
Benjamin Hodgson
7

Ich verwende MacPorts, um Python und alle von MacPorts verfolgten Module von Drittanbietern zu installieren /opt/local, und installiere alle manuell installierten Module (die nicht im MacPorts-Repository enthalten sind)/usr/local Dies hat nie zu Problemen geführt. Ich denke, Sie sind möglicherweise verwirrt über die Verwendung bestimmter MacPorts-Skripte und Umgebungsvariablen.

MacPorts python_selectwird verwendet, um die "aktuelle" Version von Python auszuwählen, hat jedoch nichts mit Modulen zu tun. Auf diese Weise können Sie beispielsweise Python 2.5 und Python 2.6 mit MacPorts installieren und zwischen den Installationen wechseln.

Die $PATHUmgebungsvariablen sind nicht beeinflussen , was Python - Module geladen werden. $PYTHONPATHist das, wonach Sie suchen. $PYTHONPATHsollte auf Verzeichnisse verweisen, die Python-Module enthalten, die Sie laden möchten. In meinem Fall $PYTHONPATHenthält meine Variable /usr/local/lib/python26/site-packages. Wenn Sie MacPorts 'Python verwenden, werden die anderen richtigen Verzeichnisse für Sie eingerichtet, sodass Sie nur zusätzliche Pfade hinzufügen müssen $PYTHONPATH. Wird aber auch $PATHnicht verwendet, wenn Python nach von Ihnen installierten Modulen sucht.

$PATH wird verwendet, um ausführbare Dateien zu finden. Wenn Sie also Python von MacPorts installieren, stellen Sie sicher, dass /opt/local/bines sich in Ihrem befindet $PATH.

Mipadi
quelle
6

Es ist nichts Falsches daran, eine MacPorts Python-Installation zu verwenden. Wenn Sie Python-Module von MacPorts installieren, diese dann aber nicht sehen, bedeutet dies wahrscheinlich, dass Sie den MacPorts-Python, auf dem Sie installiert haben, nicht aufrufen. In einer Terminal-Shell können Sie absolute Pfade verwenden, um die verschiedenen Pythons aufzurufen, die möglicherweise installiert sind. Beispielsweise:

$ /usr/bin/python2.5         # Apple-supplied 2.5 (Leopard)
$ /opt/local/bin/python2.5   # MacPorts 2.5
$ /opt/local/bin/python2.6   # MacPorts 2.6
$ /usr/local/bin/python2.6   # python.org (MacPython) 2.6
$ /usr/local/bin/python3.1   # python.org (MacPython) 3.1

Um die richtige Python standardmäßig zu erhalten, muss sichergestellt sein, dass Ihre Shell $ PATH richtig eingestellt ist, um sicherzustellen, dass zuerst die richtige ausführbare Datei gefunden wird. Eine andere Lösung besteht darin, Shell-Aliase für die verschiedenen Pythons zu definieren.

Eine Installation von python.org (MacPython) ist ebenfalls in Ordnung, wie andere vorgeschlagen haben. easy_install kann aber auch hier helfen, da jede Python-Instanz möglicherweise einen eigenen easy_installBefehl hat, stellen Sie sicher, dass Sie das Recht aufrufen easy_install.

Ned Deily
quelle
2
Wenn er MacPorts verwendet, besteht die richtige Methode, um diese Version von Python zum Standard zu machen, nicht darin, sich mit dem PATH herumzuschlagen, sondern "python_select" zu installieren und die erforderlichen symbolischen Links automatisch wechseln zu lassen, um diese Version von Python zum Standard zu machen.
Michael Aaron Safyan
3
python_select verwaltet nur Python-Symlinks in / opt / local / bin und es gibt keine Garantie dafür, dass / opt / local / bin in Ihrem $ PATH vor / usr / local / bin oder / usr / bin steht (obwohl die Erstinstallation von MacPorts dies versucht tun Sie dies). Der Punkt ist, dass bei den mehreren verfügbaren Versionen die Verwendung von "python" oder sogar "python2.5" im Allgemeinen ein kleiner Fehler ist: Sie wissen nicht, welches Python Sie erhalten, es sei denn, Sie kennen das $ PATH-Fallstricke und / oder absolute Pfade verwenden.
Ned Deily
6

Wenn Sie Python von MacPorts verwenden, verfügt es über eine eigene easy_install-Datei unter: /opt/local/bin/easy_install-2.6 (für py26 also). Es ist nicht dasselbe wie einfach direkt easy_install aufzurufen, selbst wenn Sie python_select verwendet haben, um Ihren Standard-Python-Befehl zu ändern.

Tudor
quelle
1
Gleiches gilt für pip. Mit meinem MacPorts-Setup starte ich pip-2.6 (in / opt / local / bin /), um Python-Module zu installieren, die gut mit dem MacPorts-Python funktionieren. Sie können sudo port install py2.6-pippip bekommen.
Zlovelady
4

Haben Sie sich überhaupt mit easy_install befasst ? Es synchronisiert Ihre Macports oder ähnliches nicht, lädt jedoch automatisch das neueste Paket und alle erforderlichen Abhängigkeiten herunter, d. H.

easy_install nose

für das Testpaket für die Naseneinheit oder

easy_install trac

für den tracBug Tracker.

Es gibt auch ein bisschen mehr Informationen auf ihrer EasyInstall- Seite.

Mark Rushakoff
quelle
1
easy_install ist in Ordnung. Beachten Sie jedoch, dass genau wie bei mehreren installierten Python-Versionen auch mehrere Versionen von easy_install installiert werden können, die jeweils einer anderen Python-Installation / -Version zugeordnet sind. Sie müssen nur sicherstellen, dass Sie verstehen, welche Sie aufrufen (welche (1) kann hilfreich sein).
Ned Deily
2

Wenn Sie Module mit MacPorts installieren, wird diese nicht in die Apple-Version von Python aufgenommen. Stattdessen werden diese Module auf der ausgewählten MacPorts-Version von Python installiert.

Sie können ändern, welche Python-Version standardmäßig verwendet wird, indem Sie einen Mac-Port namens python_select verwenden . Anleitung hier .

Außerdem gibt es easy_install . Welches Python verwendet, um Python-Module zu installieren.

Jon W.
quelle
python_selectist jetzt veraltet, siehe neuere Antworten.
Askewchan
2

Möglicherweise haben Sie bereits pip3vorinstalliert, probieren Sie es einfach aus!

Shayan Amani
quelle
-1

Ich benutze easy_install mit Apples Python und es funktioniert wie ein Zauber.

las3rjock
quelle
-1

Installieren Sie direkt eines der Fink-Pakete (Django 1.6 ab 2013-Nov)

fink install django-py27
fink install django-py33

Oder erstellen Sie sich eine virtuelle Umgebung:

fink install virtualenv-py27
virtualenv django-env
source django-env/bin/activate
pip install django
deactivate # when you are done

Oder verwenden Sie fink django und alle anderen installierten Pip-Pakete in einer virtuellen Umgebung

fink install django-py27
fink install virtualenv-py27
virtualenv django-env --system-site-packages
source django-env/bin/activate
# django already installed
pip install django-analytical # or anything else you might want
deactivate # back to your normally scheduled programming
Kurt Schwehr
quelle