wake-up-neo.com

Was ist der kompatibelste Weg, um Python-Module auf einem Mac zu installieren?

Ich fange an, Python zu lernen und es zu lieben. Ich arbeite hauptsächlich auf einem Mac sowie Linux. Ich stelle fest, dass unter Linux (meistens Ubuntu 9.04) ein Python-Modul mit apt-get installiert wird. Ich kann es problemlos importieren.

Auf dem Mac bin ich es gewohnt, mit Macports das gesamte Unixy-Zeug zu installieren. Ich finde jedoch, dass die meisten Python-Module, die ich damit installiere, von Python nicht gesehen werden. Ich habe einige Zeit mit PATH-Einstellungen herumgespielt und python_select verwendet. Nichts hat wirklich funktioniert und zu diesem Zeitpunkt 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 möchte mit einem "akzeptierten" Ansatz beginnen (wenn das richtige Wort ist). 

Ich wunderte mich also, welche Methode Mac Python-Entwickler verwenden, um ihre Module zu verwalten.

Bonusfragen: 

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

123
GloryFish

Die beliebteste Methode zum Verwalten von Python-Paketen (wenn Sie nicht Ihren Systempaket-Manager 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 Package Index , 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, behebt viele Probleme in Verbindung mit easy_install. Pip verwendet das gleiche Paket-Repository wie easy_install, es funktioniert einfach besser. Easy_install muss eigentlich nur für diesen Befehl verwendet werden:

easy_install pip

Danach verwenden Sie:

pip install Django

Irgendwann werden Sie wahrscheinlich ein wenig über virtualenv lernen wollen. Wenn Sie in Projekten mit widersprüchlichen Paketanforderungen viel Python entwickeln, ist virtualenv ein Glücksfall. Sie haben die Möglichkeit, verschiedene Versionen verschiedener Pakete zu verwenden und je nach Ihren Bedürfnissen leicht zwischen diesen zu wechseln.

In Bezug auf den zu verwendenden Python bringt das Festhalten an Apples Python die geringsten Kopfschmerzen. Wenn Sie jedoch eine neuere Version benötigen (Leopard ist 2.5.1, glaube ich), würde ich mit dem macports Python 2.6 gehen.

142
sixthgear

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, weil die Standardumgebung von Mac OS X und meine Entwicklungsumgebung sauber sind. Verschieben Sie einfach den Ordner / opt und testen Sie Ihre Pakete mit einer normalen Python-Benutzerumgebung

MacPorts ist nur innerhalb von Macs portierbar, aber mit easy_install oder pip lernen Sie, wie Sie Ihre Umgebung auf einer beliebigen Plattform einrichten (Win/Mac/Linux/Bsd ...). Außerdem wird es immer aktueller und mit mehr Paketen sein

Ich persönlich lasse MacPorts meine Python-Module verwalten, um alles auf dem neuesten Stand zu halten. Wie jeder andere Paketmanager auf hoher Ebene (z. B. apt-get) ist er viel besser für das starke Anheben von Modulen mit vielen binären Abhängigkeiten. Ich kann meine Qt-Bindungen (PySide) nicht mit easy_install oder pip erstellen. Qt ist riesig und braucht viel zu kompilieren. Sobald Sie ein Python-Paket benötigen, das eine Bibliothek benötigt, die von Nicht-Python-Programmen verwendet wird, sollten Sie easy_install oder pip vermeiden 

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

pip-2.7 install --user elixir

(stellen Sie sicher, dass Sie immer pip- (version) eingeben)

Dadurch wird eine zusätzliche Python-Bibliothek in Ihrem Heimatverzeichnis erstellt. Ja, Python arbeitet mit mehr als einem Bibliotheksspeicherort: einem, der von MacPorts gesteuert wird, und einem lokalen Benutzer für alles, was in MacPorts fehlt.

Nun merke ich, 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 bietet Ihnen eine Liste aller Module (zusammen mit ihren Versionen), die Sie mit MacPorts, easy_install und pip selbst installiert haben:

pip-2.7 einfrieren

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

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

Obwohl ich normalerweise keine Versionskonflikte habe, möchte ich mit virtualenv eine saubere Umgebung einrichten und einen klaren Überblick über die Abhängigkeiten meiner Pakete 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 der alte Debian-Stil mit einem zusätzlichen python_select-Paket ausgewählt werden (es ist aus Kompatibilitätsgründen noch vorhanden). Jetzt haben Sie den select-Befehl, um auszuwählen, welche Python-Version verwendet werden soll (Sie können sogar die von Apple installierte Version 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

42
SystematicFrank

Siehe 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-Portinstallation python26 python_select 
 Sudo-Portauswahl --set python python26 

OR

 Sudo-Port installieren python30 python_select 
 Sudo-Port auswählen --set python python30 

Verwenden Sie den ersten Befehlssatz zum Installieren von Python 2.6 und den zweiten zum Installieren von Python 3.0. Dann benutze:

 Sudo-Portinstallation py26-Paketname 

OR

 Sudo-Portinstallation py30-Paketname 

Ersetzen Sie in den obigen Befehlen paketnamen mit dem Namen des Pakets, zum Beispiel:

 Sudo-Port installieren py26-setuptools 

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

Um eine vollständige Liste der verfügbaren Pakete für Python zu erhalten, geben Sie Folgendes ein:

 Portliste | grep py26 -

OR

 Portliste | grep py30 -

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

30

Ich benutze MacPorts, um Python und alle von MacPorts nachverfolgten Drittanbieter-Module in /opt/local zu installieren, und installiere alle manuell installierten Module (die nicht im MacPorts-Repository enthalten sind) in /usr/local. Ich denke, Sie können verwirrt sein, wenn Sie bestimmte MacPorts-Skripts und Umgebungsvariablen verwenden.

MacPorts python_select wird zur Auswahl der "aktuellen" Version von Python verwendet, hat jedoch nichts mit Modulen zu tun. So können Sie beispielsweise Python 2.5 und Python 2.6 mit MacPorts installieren und zwischen den Installationen wechseln.

Die $PATH-Umgebungsvariablen wirken sich auf nicht aus, welche Python-Module geladen werden. $PYTHONPATH ist was Sie suchen. $PYTHONPATH sollte auf Verzeichnisse verweisen, die Python-Module enthalten, die Sie laden möchten. In meinem Fall enthält meine $PYTHONPATH-Variable /usr/local/lib/python26/site-packages. Wenn Sie Python von MacPorts verwenden, werden die anderen richtigen Verzeichnisse für Sie eingerichtet. Sie müssen also nur additional pfade zu $PYTHONPATH hinzufügen. Allerdings wird $PATH überhaupt nicht verwendet, wenn Python nach installierten Modulen sucht.

$PATH ist wird zum Suchen von ausführbaren Dateien verwendet. Wenn Sie Python von MacPorts installieren, müssen Sie sicherstellen, dass /opt/local/bin in Ihrem $PATH enthalten ist.

7
mipadi

Wenn Sie Python von MacPorts verwenden, gibt es ein eigenes easy_install-Verzeichnis unter: /opt/local/bin/easy_install-2.6 (für py26 also). Es ist nicht dasselbe, als einfach easy_install direkt aufzurufen, selbst wenn Sie python_select verwendet haben, um Ihren Standard-Python-Befehl zu ändern.

6
Tudor

Es ist nichts falsch mit einer MacPorts Python-Installation. Wenn Sie Python-Module von MacPorts installieren, diese jedoch nicht sehen, bedeutet das wahrscheinlich, dass Sie nicht den MacPorts-Python aufrufen, auf dem Sie installiert sind. In einer Terminal-Shell können Sie absolute Pfade verwenden, um die verschiedenen Pythons aufzurufen, die möglicherweise installiert werden. Zum Beispiel:

$ /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 den richtigen Python standardmäßig zu erhalten, muss Ihr Shell $ PATH richtig eingestellt sein, 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 auch in Ordnung, wie andere vorgeschlagen haben. easy_install kann helfen, aber da jede Python-Instanz möglicherweise einen eigenen easy_install-Befehl hat, stellen Sie sicher, dass Sie den richtigen easy_install aufrufen.

6
Ned Deily

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

easy_install nose

für das Testpaket der Bugeinheit oder

easy_install trac

für den trac Bug-Tracker.

Auf ihrer EasyInstall - Seite gibt es auch etwas mehr Informationen.

4
Mark Rushakoff

Für MacPython-Installationen habe ich in diesem Blogbeitrag eine effektive Lösung gefunden, um das Problem mit setuptools (easy_install) zu beheben:

http://droidism.com/getting-running-mit-Django-und-macpython-26-on-leopard

Ein praktischer Tipp: Finden Sie heraus, welche Python-Version im Terminal aktiv ist:

which python
3
Edmundito

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

Sie können die standardmäßig verwendete Python-Version über einen Mac-Port mit dem Namen python_select ändern. Anweisungen hier .

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

2
Jon W

In Bezug auf die zu verwendende Python-Version wird normalerweise eine alte Python-Version von Mac OS ausgeliefert. Es ist eine gute Idee, auf eine neuere Version zu aktualisieren. Sie können eine .dmg von http://www.python.org/download/ herunterladen. Wenn Sie dies tun, vergessen Sie nicht, den Pfad zu aktualisieren. Die genauen Befehle finden Sie hier http://farmdev.com/thoughts/66/python-3-0-on-mac-os-x-alongside-2-6-2-5-etc-/

1
Mario F

Möglicherweise haben Sie pip3 bereits vorinstalliert. Probieren Sie es einfach aus!

0
SHi ON