¿Cuál es la forma más compatible de instalar módulos python en una Mac?

125

Estoy empezando a aprender python y me encanta. Trabajo en una Mac principalmente, así como en Linux. Estoy descubriendo que en Linux (Ubuntu 9.04 principalmente) cuando instalo un módulo de Python usando apt-get, funciona bien. Puedo importarlo sin problemas.

En Mac, estoy acostumbrado a usar Macports para instalar todas las cosas de Unixy. Sin embargo, estoy descubriendo que la mayoría de los módulos de Python que instalo con él no están siendo vistos por Python. He pasado algún tiempo jugando con la configuración de RUTA y usando python_select. Nada ha funcionado realmente y en este punto no estoy entendiendo realmente, en cambio solo estoy hurgando.

Tengo la impresión de que Macports no es universalmente amado por la gestión de módulos de Python. Me gustaría comenzar de nuevo utilizando un enfoque más "aceptado" (si esa es la palabra correcta).

Entonces, me preguntaba, ¿cuál es el método que usan los desarrolladores de Mac Python para administrar sus módulos?

Preguntas extra:

¿Usas el pitón de Apple o alguna otra versión? ¿Compila todo desde la fuente o hay un administrador de paquetes que funciona bien (Fink?).

GloryFish
fuente
Hubo un buen artículo sobre cómo empaquetar aplicaciones PyQt para Mac OS X en Ars Technica hace un tiempo: arstechnica.com/open-source/guides/2009/03/…
Todd Gamblin el
77
MacPorts es perfecto para Python en Mac. NOTA: debe instalar los paquetes de Python a través de MacPorts para que se instalen en su instalación de MacPorts Python. También puede instalar paquetes sin usar MacPorts; sin embargo, debe hacer que esa versión de python sea la predeterminada a través de python_select ANTES de instalar el paquete. Si instala el paquete y luego usa python_select, no habrá diferencia, ya que se habrá instalado en cualquier versión de Python que fuera la predeterminada en el momento de la instalación.
Michael Aaron Safyan

Respuestas:

144

La forma más popular de administrar paquetes de Python (si no está usando el administrador de paquetes de su sistema) es usar setuptools y easy_install. Probablemente ya esté instalado en su sistema. Úselo así:

easy_install django

easy_install utiliza el índice del paquete Python, que es un recurso increíble para los desarrolladores de python. Eche un vistazo para ver qué paquetes están disponibles.

Una mejor opción es pip , que está ganando tracción, ya que intenta solucionar muchos de los problemas asociados con easy_install. Pip usa el mismo repositorio de paquetes que easy_install, simplemente funciona mejor. Realmente el único uso de tiempo necesario para usar easy_install es para este comando:

easy_install pip

Después de eso, use:

pip install django

En algún momento probablemente querrás aprender un poco sobre virtualenv . Si realiza mucho desarrollo de Python en proyectos con requisitos de paquetes conflictivos, virtualenv es una bendición. Le permitirá tener versiones completamente diferentes de varios paquetes y cambiar entre ellos fácilmente según sus necesidades.

Con respecto a qué python usar, seguir con el python de Apple le dará menos dolores de cabeza, pero si necesita una versión más nueva (Leopard es 2.5.1, creo), optaría por el macports python 2.6.

sexta marcha
fuente
55
Recientemente reconstruí mi máquina y me cambié a usar solo Homebrew y PIP, de repente todos los problemas de compilación que tenía habían desaparecido.
GloryFish
42

Su pregunta ya tiene tres años y hay algunos detalles que no están cubiertos en otras respuestas:

La mayoría de las personas que conozco usan HomeBrew o MacPorts , prefiero MacPorts debido a su corte limpio de lo que es un entorno predeterminado de Mac OS X y mi configuración de desarrollo. Simplemente mueva su carpeta / opt y pruebe sus paquetes con un entorno Python de usuario normal

MacPorts solo es portátil dentro de Mac, pero con easy_install o pip aprenderá cómo configurar su entorno en cualquier plataforma (Win / Mac / Linux / Bsd ...). Además, siempre estará más actualizado y con más paquetes.

Personalmente, dejo que MacPorts maneje mis módulos de Python para mantener todo actualizado. Al igual que cualquier otro administrador de paquetes de alto nivel (es decir, apt-get), es mucho mejor para el trabajo pesado de módulos con muchas dependencias binarias. No hay forma de que construya mis enlaces Qt (PySide) con easy_install o pip. Qt es enorme y lleva mucho tiempo compilarlo. Tan pronto como desee un paquete de Python que necesite una biblioteca utilizada por programas que no sean de Python, intente evitar easy_install o pip

En algún momento, encontrará que faltan algunos paquetes dentro de MacPorts. No creo que MacPorts te dé alguna vez toda la CheeseShop . Por ejemplo, recientemente necesitaba el módulo Elixir , pero MacPorts solo ofrece py25-elixir y py26-elixir, sin versión py27. En casos como estos tienes:

pip-2.7 install --user elixir

(asegúrese de escribir siempre pip- (versión))

Eso construirá una biblioteca Python adicional en su directorio de inicio. Sí, Python funcionará con más de una ubicación de biblioteca: una controlada por MacPorts y una local de usuario para todo lo que falta en MacPorts.

Ahora observe que estoy a favor de pip sobre easy_install. Hay una buena razón por la que debe evitar las herramientas de configuración y easy_install. Aquí hay una buena explicación y trato de mantenerme alejado de ellos. Una característica muy útil de pip es darle una lista de todos los módulos (junto con sus versiones) que instaló con MacPorts, easy_install y pip:

pip-2.7 congelar

Si ya comenzó a usar easy_install, no se preocupe, pip puede reconocer todo lo que ya ha hecho con easy_install e incluso actualizar los paquetes instalados con él.

Si es desarrollador, esté atento a virtualenv para controlar diferentes configuraciones y combinaciones de versiones de módulos. Otras respuestas ya lo mencionan, lo que no se menciona hasta ahora es el módulo Tox , una herramienta para probar que su paquete se instala correctamente con diferentes versiones de Python.

Aunque generalmente no tengo conflictos de versión, me gusta tener virtualenv para configurar un entorno limpio y obtener una visión clara de las dependencias de mis paquetes. De esa manera nunca olvido ninguna dependencia en mi setup.py

Si opta por MacPorts, tenga en cuenta que ya no se seleccionan varias versiones del mismo paquete, como el antiguo estilo Debian con un paquete adicional python_select (todavía está allí por compatibilidad). Ahora tiene el comando de selección para elegir qué versión de Python se utilizará (incluso puede seleccionar las instaladas por Apple):

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

$ port select python python32

Agregue tox encima y sus programas deberían ser realmente portátiles

Frank sistemático
fuente
30

Por favor, véase el entorno de desarrollo Python OS X . La mejor manera es usar MacPorts . Descargue e instale MacPorts, luego instale Python a través de MacPorts escribiendo los siguientes comandos en la Terminal:

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

O

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

Use el primer conjunto de comandos para instalar Python 2.6 y el segundo conjunto para instalar Python 3.0. Luego use:

sudo port install py26-packagename

O

sudo port install py30-packagename

En los comandos anteriores, reemplace packagename con el nombre del paquete, por ejemplo:

sudo port install py26-setuptools

Estos comandos instalarán automáticamente el paquete (y sus dependencias) para la versión de Python dada.

Para obtener una lista completa de los paquetes disponibles para Python, escriba:

lista de puertos | grep py26-

O

lista de puertos | grep py30-

El comando que use dependerá de la versión de Python que elija instalar.

Michael Aaron Safyan
fuente
1
Para el registro, en versiones recientes de MacPorts sudo python_select python30ha sido reemplazado por sudo port select --set python python30.
Benjamin Hodgson
7

Utilizo MacPorts para instalar Python y los módulos de terceros a los que MacPorts rastrea /opt/locale instalo los módulos instalados manualmente (aquellos que no están en el repositorio de MacPorts) /usr/local, y esto nunca ha causado ningún problema. Creo que puede estar confundido sobre el uso de ciertos scripts MacPorts y variables de entorno.

MacPorts python_selectse usa para seleccionar la versión "actual" de Python, pero no tiene nada que ver con los módulos. Esto le permite, por ejemplo, instalar Python 2.5 y Python 2.6 usando MacPorts, y cambiar entre instalaciones.

Las $PATHvariables de entorno no afectan qué módulos de Python se cargan. $PYTHONPATHes lo que buscas. $PYTHONPATHdebe apuntar a directorios que contengan módulos de Python que desee cargar. En mi caso, mi $PYTHONPATHvariable contiene /usr/local/lib/python26/site-packages. Si usa Python de MacPorts, configura los otros directorios adecuados para usted, por lo que solo necesita agregar rutas adicionales$PYTHONPATH . Pero, de nuevo, $PATHno se usa en absoluto cuando Python busca los módulos que ha instalado.

$PATH se usa para buscar ejecutables, por lo que si instala Python de MacPorts, asegúrese de que /opt/local/binesté en su $PATH.

mipadi
fuente
6

No hay nada de malo en usar una instalación de MacPorts Python. Si está instalando módulos de Python desde MacPorts pero luego no los ve, eso probablemente significa que no está invocando el Python de MacPorts en el que instaló. En un shell de terminal, puede usar rutas absolutas para invocar las diversas pitones que se pueden instalar. Por ejemplo:

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

Para obtener el pitón correcto de forma predeterminada, es necesario asegurarse de que su shell $ PATH esté configurado correctamente para garantizar que se encuentre primero el ejecutable correcto. Otra solución es definir alias de shell para las diferentes pitones.

Una instalación de python.org (MacPython) también está bien, como han sugerido otros. easy_install puede ayudar, pero, una vez más, debido a que cada instancia de Python puede tener su propio easy_installcomando, asegúrese de invocar la correcta easy_install.

Ned Deily
fuente
2
Si usa MacPorts, la forma correcta de hacer que esa versión de Python sea la predeterminada es no meterse con la RUTA, sino instalar "python_select" y dejar que cambie automáticamente los enlaces simbólicos necesarios para que esa versión de Python sea la predeterminada.
Michael Aaron Safyan
3
python_select solo administra los enlaces simbólicos de python en / opt / local / bin y no hay garantía de que / opt / local / bin aparezca antes / usr / local / bin o / usr / bin en su $ PATH (aunque la instalación inicial de MacPorts intenta hazlo). El punto es que, con las múltiples versiones disponibles, usar solo "python" o incluso "python2.5" es un poco difícil en general: no sabes qué Python terminarás a menos que conozcas el $ RUTA trampas y / o uso de rutas absolutas.
Ned Deily
6

Si usa Python desde MacPorts, tiene su propia instalación fácil ubicada en: /opt/local/bin/easy_install-2.6 (para py26, eso es). No es lo mismo que simplemente llamar a easy_install directamente, incluso si usó python_select para cambiar su comando predeterminado de python.

Tudor
fuente
1
Lo mismo para pip. Con mi configuración de MacPorts, ejecuto pip-2.6 (que está en / opt / local / bin /) para instalar módulos de Python que funcionan bien con el Python de MacPorts. Puedes sudo port install py2.6-pipconseguir pip.
zlovelady
4

¿Has buscado en easy_install ? No sincronizará sus macports ni nada de eso, pero descargará automáticamente el último paquete y todas las dependencias necesarias, es decir

easy_install nose

para el paquete de prueba de la unidad de nariz, o

easy_install trac

para el tracrastreador de errores.

También hay un poco más de información en su página EasyInstall .

Mark Rushakoff
fuente
1
easy_install está bien. Solo tenga en cuenta que, al igual que puede tener instaladas varias versiones de python, es fácil tener instaladas varias versiones de easy_install, cada una asociada con una instalación / versión de python diferente. Solo necesita asegurarse de comprender cuál está invocando (cuál (1) puede ser de ayuda).
Ned Deily
2

Cuando instala módulos con MacPorts, no entra en la versión de Python de Apple. En cambio, esos módulos se instalan en la versión MacPorts de Python seleccionada.

Puede cambiar qué versión de Python se usa de manera predeterminada utilizando un puerto mac llamado python_select . instrucciones aquí .

Además, hay easy_install . Que utilizará python para instalar módulos de python.

Jon W
fuente
python_selectahora está en desuso, vea las respuestas más nuevas.
askewchan
2

Es posible que ya haya pip3preinstalado, ¡así que pruébelo!

Shayan Amani
fuente
-1

Instale directamente uno de los paquetes fink (Django 1.6 a partir de 2013-noviembre)

fink install django-py27
fink install django-py33

O cree usted mismo un virtualenv:

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

O use fink django más cualquier otro paquete instalado pip en 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
fuente