¿Cómo puedo anular los módulos de Python predeterminados con los que instalo con pip?

0

Me he topado con este problema con PIL y Pillow. No me di cuenta de que PIL ya estaba instalado, así que corrí:

sudo pip install PIL

Como mejor supe, instaló PIL. Luego escribí un programa que usaba una función en PIL que no funcionaba debido a un error dentro de PIL. Comencé a trabajar para solucionar ese problema y alguien me recomendó desinstalar PIL e instalar Pillow, que tiene una mejor interfaz para PIL. Así lo hice:

sudo pip uninstall PIL
sudo pip install Pillow

Luego, en una nueva ventana de Terminal que acababa de abrir, ejecuté un script en Python que incluía la línea:

import Pillow

y recibo este mensaje de error:

Traceback (most recent call last):
  File "../HalPy/LandSearch/GetOurLotMap.py", line 7, in <module>
    import Pillow
ImportError: No module named Pillow

pero si ejecuto:

pip show Pillow

me sale:

---
Name: Pillow
Version: 5.2.0
Location: /Library/Python/2.7/site-packages
Requires: 

Desinstalé Pillow y luego lo instalé con la opción --user y se instaló en el árbol de directorios de la biblioteca de mi cuenta, pero no funcionó. He intentado casi todas las combinaciones que se me ocurren para instalar PIL o Pillow (nunca ambas al mismo tiempo), pero no importa lo que haga, no puedo importar Pillow. Python (versión 2.7) nunca lo reconoce como existente. Está allí, he comprobado el directorio y muestra que está allí, pero no lo está.

He instalado otros módulos con pip y se colocan en el mismo directorio (/Library/Python/2.7/site-packages) y se reconocen.

Lo mejor que puedo decir, ya que PIL está incluido en la instalación de Python de Apple, con todos los módulos en el árbol de directorios /System/Library/Frameworks/Python.framework/, cuando uso pip para instalarlo (o Pillow) , es ignorado por Python.

Antes de esto, tenía /Library/Python/2.7/site-packages en PYTHONPATH antes de cualquier listado de directorios en el árbol de directorios / System. También tengo, en /Library/Python/2.7/site-packages, un archivo llamado bypass-Apple-SIP.pth. Se supone que la extensión .pth lo ayudará a reemplazar los módulos en el árbol de directorios / Sistema. Dentro de este archivo está:

import sys
sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Por lo que puedo decir, esto ha funcionado antes, pero no estaba tratando de reemplazar un módulo que se instaló de forma predeterminada con la instalación de Apple en Python.

En el pasado usé MacPorts y descubrí que lo odiaba y tenía problemas con Perl (y, creo, Python). No quiero usar eso, Fink, Homebrew, ni nada de eso.

Tal como lo veo, me gustaría encontrar una manera de hacer una de estas:

  1. Desinstalar el PIL instalado de Apple
  2. Asegúrese de que Python dé prioridad a los módulos en /Library/Python/2.7/site-packages sobre los módulos preexistentes
  3. Obtenga Python para ver los módulos que se instalan en el árbol de mi directorio de inicio y utilícelos sobre los módulos preinstalados
  4. Cualquier otra cosa que me permita anular los módulos en /System/Library/Frameworks/Python.framework/ si tengo problemas con esos módulos preinstalados.

¿Cómo puedo hacer algo como cualquiera de esas ideas para usar Pillow sobre PIL y hacer que Python ignore la versión anterior 1.x de PIL que Apple instaló?

    
pregunta Tango 12.07.2018 - 09:19

1 respuesta

1

La solución a esto es entornos virtuales.

Cada entorno que tienes puede tener bibliotecas independientes no conflictivas (y versiones de Python), por lo que uno puede tener una almohada y otro pil.

El proicess es básicamente

  1. Crear un nuevo entorno: esto creará enlaces a Python, etc.
  2. Instala las bibliotecas que quieras
  3. Modifique su entorno de shell para que la ruta apunte al python que creó en el paso 1

Las herramientas se incluyen en python 3.6 y 3.7 . Para cambiar entre las diferentes versiones de python, consulte pyenv .

Si necesita instalar otro python, también puede considerar conda . Esto puede incluir 2.7 y es equivalente a la combinación anterior pero incluye binarios de bibliotecas de C

Para Python 2.7 de Apple, vea pipenv & entornos virtuales

    
respondido por el Mark 12.07.2018 - 11:04

Lea otras preguntas en las etiquetas