Me encontré con este problema con PIL y Pillow. No me di cuenta de que PIL ya estaba instalado, así que ejecuté:
sudo pip install PIL
Según entendía, se instaló PIL. Luego escribí un programa que usaba una característica en PIL que no funcionaría debido a un error dentro de PIL. Empecé a trabajar en resolver ese problema y alguien recomendó desinstalar PIL e instalar Pillow, que tiene una mejor interfaz que PIL. Así que hice lo siguiente:
sudo pip uninstall PIL
sudo pip install Pillow
Luego, en una nueva ventana de Terminal que acababa de abrir, ejecuté un script de Python que incluía la línea:
import Pillow
y obtengo este mensaje de error:
Traceback (most recent call last):
File "../HalPy/LandSearch/GetOurLotMap.py", line 7, in
import Pillow
ImportError: No module named Pillow
pero si ejecuto:
pip show Pillow
Obtengo:
---
Name: Pillow
Version: 5.2.0
Location: /Library/Python/2.7/site-packages
Requires:
Desinstalé Pillow luego lo instalé con la opción --user y se instaló en el árbol de directorios de mi cuenta Library, pero eso no funcionó. He intentado casi todas las combinaciones que se me ocurren para instalar PIL o Pillow (nunca ambos 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 revisado el directorio y pip muestra que está allí, pero no está.
He instalado otros módulos con pip y se colocan en el mismo directorio (/Library/Python/2.7/site-packages) y son reconocidos.
Según puedo decir, dado 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 lista de cualquier directorio en el árbol de directorios /System. También tengo, en /Library/Python/2.7/site-packages, un archivo llamado bypass-Apple-SIP.pth. La extensión .pth se supone que lo ayuda a sobrescribir los módulos en el árbol de directorios /System. Dentro de este archivo está:
import sys
sys.path = ['/Library/Python/2.7/site-packages'] + sys.path
Según puedo decir, esto ha funcionado antes, pero no estaba intentando sobrescribir ningún módulo que estuviera instalado por defecto con la instalación de Python de Apple.
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 por el estilo.
Según lo veo, me gustaría encontrar una manera de hacer una de estas opciones:
- Desinstalar el PIL instalado por Apple
- Asegurarme de que Python dé prioridad a los módulos en /Library/Python/2.7/site-packages sobre los módulos preexistentes
- Hacer que Python vea cualquier módulo que pip instale dentro de mi árbol de directorios de inicio y los use sobre los módulos preinstalados
- 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 similar a alguna de esas ideas para usar Pillow en lugar de PIL y hacer que Python ignore la antigua versión 1.x de PIL que instaló Apple?
0 votos
¿Por qué estás usando 2.7? Solo debes hacerlo si hay una biblioteca vieja que debas usar. la versión actual es 3.7 que incluye una solución para esto. (También hay una solución para 2.7)
0 votos
No he tenido tiempo de revisar mis cosas y asegurarme de que estén actualizadas para que funcionen con la versión 3.7. Lo haré en algún momento, pero no por ahora. Si hay una solución para la versión 2.7, ¡me encantaría saber cuál es!