Quelle est la manière la plus compatible d'installer des modules python sur un Mac?

125

Je commence à apprendre le python et à l'adorer. Je travaille principalement sur un Mac ainsi que sur Linux. Je trouve que sur Linux (Ubuntu 9.04 principalement) lorsque j'installe un module python en utilisant apt-get, cela fonctionne bien. Je peux l'importer sans problème.

Sur Mac, j'ai l'habitude d'utiliser Macports pour installer tout le matériel Unixy. Cependant, je trouve que la plupart des modules python que j'installe avec lui ne sont pas vus par python. J'ai passé du temps à jouer avec les paramètres PATH et à utiliser python_select. Rien n'a vraiment fonctionné et à ce stade, je ne comprends pas vraiment, je ne fais que fouiller.

J'ai l'impression que Macports n'est pas universellement apprécié pour la gestion des modules python. J'aimerais repartir à zéro en utilisant une approche plus «acceptée» (si c'est le bon mot).

Alors, je me demandais quelle est la méthode que les développeurs Mac Python utilisent pour gérer leurs modules?

Questions bonus:

Utilisez-vous le python d'Apple ou une autre version? Compilez-vous tout à partir des sources ou existe-t-il un gestionnaire de paquets qui fonctionne bien (Fink?).

GloryFish
la source
Il y avait un bel article sur l'empaquetage des applications PyQt pour Mac OS X chez Ars Technica il y a quelque temps: arstechnica.com/open-source/guides/2009/03
Todd Gamblin
7
MacPorts est parfait pour Python sur Mac. REMARQUE: vous devez installer les packages Python via MacPorts pour qu'ils soient installés dans votre installation MacPorts Python. Vous pouvez également installer des packages sans utiliser MacPorts; cependant, vous devez faire de cette version de python la version par défaut via python_select AVANT d'installer le paquet. Si vous installez le package puis utilisez python_select, cela ne fera aucune différence, car il aura été installé dans la version par défaut de Python au moment de l'installation.
Michael Aaron Safyan

Réponses:

144

Le moyen le plus courant de gérer les packages python (si vous n'utilisez pas votre gestionnaire de packages système) est d'utiliser setuptools et easy_install. Il est probablement déjà installé sur votre système. Utilisez-le comme ceci:

easy_install django

easy_install utilise l' index de package Python qui est une ressource incroyable pour les développeurs python. Jetez un œil pour voir quels packages sont disponibles.

Une meilleure option est pip , qui gagne du terrain , car il tente de résoudre de nombreux problèmes associés à easy_install. Pip utilise le même référentiel de packages que easy_install, cela fonctionne mieux. Vraiment, la seule utilisation du temps nécessaire pour utiliser easy_install est pour cette commande:

easy_install pip

Après cela, utilisez:

pip install django

À un moment donné, vous voudrez probablement en savoir un peu plus sur virtualenv . Si vous faites beaucoup de développement python sur des projets avec des exigences de package contradictoires, virtualenv est une aubaine. Il vous permettra d'avoir des versions complètement différentes de différents packages, et de basculer facilement entre eux en fonction de vos besoins.

En ce qui concerne le python à utiliser, s'en tenir au python d'Apple vous donnera le moins de maux de tête, mais si vous avez besoin d'une version plus récente (Leopard est 2.5.1 je crois), j'irais avec le python de macports 2.6.

sixième
la source
5
J'ai récemment reconstruit ma machine et suis passé à n'utiliser que Homebrew et PIP, tout à coup tous les problèmes de construction que j'avais ont disparu.
GloryFish
42

Votre question a déjà trois ans et certains détails ne sont pas traités dans d'autres réponses:

La plupart des gens que je connais utilisent HomeBrew ou MacPorts , je préfère MacPorts en raison de sa coupe nette de ce qui est un environnement Mac OS X par défaut et de ma configuration de développement. Sortez simplement votre dossier / opt et testez vos packages avec un environnement Python utilisateur normal

MacPorts n'est portable que sous Mac, mais avec easy_install ou pip, vous apprendrez à configurer votre environnement sur n'importe quelle plateforme (Win / Mac / Linux / Bsd ...). De plus, il sera toujours plus à jour et avec plus de packages

Personnellement, je laisse MacPorts gérer mes modules Python pour que tout soit mis à jour. Comme tout autre gestionnaire de paquets de haut niveau (par exemple: apt-get), il est bien meilleur pour le gros du travail des modules avec beaucoup de dépendances binaires. Il n'y a aucun moyen que je construise mes liaisons Qt (PySide) avec easy_install ou pip. Qt est énorme et prend beaucoup de temps à compiler. Dès que vous voulez un package Python qui a besoin d'une bibliothèque utilisée par des programmes non Python, essayez d'éviter easy_install ou pip

À un moment donné, vous constaterez qu'il manque des packages dans MacPorts. Je ne crois pas que MacPorts vous offrira jamais tout le CheeseShop . Par exemple, récemment, j'avais besoin du module Elixir , mais MacPorts ne propose que py25-elixir et py26-elixir, pas de version py27. Dans des cas comme ceux-ci, vous avez:

pip-2.7 install - élixir utilisateur

(assurez-vous de toujours taper pip- (version))

Cela créera une bibliothèque Python supplémentaire dans votre répertoire personnel. Oui, Python fonctionnera avec plus d'un emplacement de bibliothèque: un contrôlé par MacPorts et un utilisateur local pour tout ce qui manque dans MacPorts.

Maintenant, notez que je préfère pip à easy_install. Il y a une bonne raison pour laquelle vous devriez éviter setuptools et easy_install. Voici une bonne explication et j'essaye de m'en éloigner. Une fonctionnalité très utile de pip est de vous donner une liste de tous les modules (avec leurs versions) que vous avez installés avec MacPorts, easy_install et pip lui-même:

gel de pip-2.7

Si vous avez déjà commencé à utiliser easy_install, ne vous inquiétez pas, pip peut reconnaître tout ce qui a déjà été fait par easy_install et même mettre à jour les packages installés avec.

Si vous êtes un développeur, gardez un œil sur virtualenv pour contrôler différentes configurations et combinaisons de versions de modules. D'autres réponses le mentionnent déjà, ce qui n'est pas mentionné jusqu'à présent est le module Tox , un outil pour tester que votre package s'installe correctement avec différentes versions de Python.

Bien que je n'ai généralement pas de conflits de version, j'aime avoir virtualenv pour configurer un environnement propre et avoir une vue claire de mes dépendances de paquets. De cette façon, je n'oublie jamais les dépendances dans mon setup.py

Si vous optez pour MacPorts, sachez que plusieurs versions du même paquet ne sont plus sélectionnées comme l'ancien style Debian avec un paquet python_select supplémentaire (il est toujours là pour la compatibilité). Vous avez maintenant la commande select pour choisir la version de Python qui sera utilisée (vous pouvez même sélectionner celles installées par Apple):

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

$ port select python python32

Ajoutez tox en plus et vos programmes devraient être vraiment portables

SystématiqueFrank
la source
30

S'il vous plaît voir l' environnement de développement Python OS X . Le meilleur moyen est d'utiliser MacPorts . Téléchargez et installez MacPorts, puis installez Python via MacPorts en tapant les commandes suivantes dans le terminal:

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

OU

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

Utilisez le premier ensemble de commandes pour installer Python 2.6 et le second ensemble pour installer Python 3.0. Puis utilisez:

port sudo installer py26-packagename

OU

sudo port installer py30-packagename

Dans les commandes ci-dessus, remplacez packagename par le nom du package, par exemple:

sudo port installer py26-setuptools

Ces commandes installeront automatiquement le package (et ses dépendances) pour la version Python donnée.

Pour obtenir la liste complète des packages disponibles pour Python, tapez:

liste des ports | grep py26-

OU

liste des ports | grep py30-

La commande que vous utilisez dépend de la version de Python que vous avez choisi d'installer.

Michael Aaron Safyan
la source
1
Pour mémoire, dans les versions récentes de MacPorts sudo python_select python30a été remplacé par sudo port select --set python python30.
Benjamin Hodgson
7

J'utilise MacPorts pour installer Python et tous les modules tiers suivis par MacPorts dans /opt/local, et j'installe tous les modules installés manuellement (ceux qui ne sont pas dans le référentiel MacPorts) /usr/local, et cela n'a jamais causé de problèmes. Je pense que vous pouvez être confus quant à l'utilisation de certains scripts MacPorts et variables d'environnement.

MacPorts python_selectest utilisé pour sélectionner la version "actuelle" de Python, mais cela n'a rien à voir avec les modules. Cela vous permet, par exemple, d'installer à la fois Python 2.5 et Python 2.6 à l'aide de MacPorts et de basculer entre les installations.

Les $PATHvariables d'environnement n'affectent pas les modules Python chargés. $PYTHONPATHest ce que vous recherchez. $PYTHONPATHdoit pointer vers les répertoires contenant les modules Python que vous souhaitez charger. Dans mon cas, ma $PYTHONPATHvariable contient /usr/local/lib/python26/site-packages. Si vous utilisez Python de MacPorts, il configure les autres répertoires appropriés pour vous, vous n'avez donc qu'à ajouter des chemins supplémentaires à $PYTHONPATH. Mais encore une fois, il $PATHn'est pas du tout utilisé lorsque Python recherche les modules que vous avez installés.

$PATH est utilisé pour trouver des exécutables, donc si vous installez Python de MacPorts, assurez-vous qu'il /opt/local/binest dans votre fichier $PATH.

mipadi
la source
6

Il n'y a rien de mal à utiliser une installation MacPorts Python. Si vous installez des modules python à partir de MacPorts mais que vous ne les voyez pas, cela signifie probablement que vous n'invoquez pas le python MacPorts sur lequel vous avez installé. Dans un shell de terminal, vous pouvez utiliser des chemins absolus pour appeler les différents Pythons qui peuvent être installés. Par exemple:

$ /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

Pour obtenir le bon python par défaut, vous devez vous assurer que votre shell $ PATH est correctement défini pour garantir que le bon exécutable est trouvé en premier. Une autre solution consiste à définir des alias de coquille pour les différents pythons.

Une installation python.org (MacPython) convient également, comme d'autres l'ont suggéré. easy_install peut aider mais, encore une fois, comme chaque instance Python peut avoir sa propre easy_installcommande, assurez-vous que vous invoquez la bonne easy_install.

Ned Deily
la source
2
S'il utilise MacPorts, la bonne façon de faire de cette version de Python la version par défaut n'est pas de jouer avec le PATH, mais d'installer "python_select" et de le laisser changer automatiquement les liens symboliques nécessaires pour faire de cette version de Python la version par défaut.
Michael Aaron Safyan
3
python_select ne gère que les liens symboliques python dans / opt / local / bin et il n'y a aucune garantie que / opt / local / bin vienne avant / usr / local / bin ou / usr / bin dans votre $ PATH (bien que l'installation initiale de MacPorts tente de faites-le). Le fait est que, avec les multiples versions disponibles, utiliser simplement "python" ou même "python2.5" est un peu un jeu de dés en général: vous ne savez pas quel Python vous allez finir à moins que vous ne soyez conscient du $ PATH pièges et / ou utiliser des chemins absolus.
Ned Deily
6

Si vous utilisez Python de MacPorts, il a sa propre installation easy_install située à: /opt/local/bin/easy_install-2.6 (pour py26, c'est-à-dire). Ce n'est pas la même chose que d'appeler directement easy_install, même si vous avez utilisé python_select pour modifier votre commande python par défaut.

Tudor
la source
1
Idem pour pip. Avec ma configuration MacPorts, j'exécute pip-2.6 (qui se trouve dans / opt / local / bin /) pour installer des modules python qui fonctionnent bien avec le python MacPorts. Vous pouvez sudo port install py2.6-pipobtenir du pip.
zlovelady
4

Avez-vous déjà examiné easy_install ? Il ne synchronisera pas vos macports ou quoi que ce soit du genre, mais il téléchargera automatiquement le dernier package et toutes les dépendances nécessaires, c'est-à-dire

easy_install nose

pour le package de test de l'unité de nez, ou

easy_install trac

pour le tracbug tracker.

Il y a aussi un peu plus d'informations sur leur page EasyInstall .

Mark Rushakoff
la source
1
easy_install est très bien. Sachez simplement que, tout comme vous pouvez avoir plusieurs versions de python installées, il est facile d'avoir plusieurs versions d'easy_install installées, chacune associée à une installation / version différente de python. Vous devez juste vous assurer de comprendre lequel vous invoquez (lequel (1) peut être utile).
Ned Deily
2

Lorsque vous installez des modules avec MacPorts, ils n'entrent pas dans la version Apple de Python. Au lieu de cela, ces modules sont installés sur la version MacPorts de Python sélectionnée.

Vous pouvez modifier la version de Python utilisée par défaut à l'aide d'un port mac appelé python_select . instructions ici .

De plus, il existe easy_install . Qui utilisera python pour installer les modules python.

Jon W
la source
python_selectest désormais obsolète, consultez les nouvelles réponses.
askewchan
2

Vous avez peut-être déjà pip3pré-installé, alors essayez-le!

Shayan Amani
la source
-1

J'utilise easy_install avec le Python d'Apple, et cela fonctionne comme un charme.

las3rjock
la source
-1

Installez directement l'un des packages fink (Django 1.6 à partir de 2013-novembre)

fink install django-py27
fink install django-py33

Ou créez vous-même une virtualenv:

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

Ou utilisez fink django plus tout autre paquet installé pip dans un virtualenv

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
la source