Ho incontrato questo problema con PIL e Pillow. Non avevo realizzato che il PIL fosse già installato, quindi ho eseguito:
sudo pip install PIL
Come meglio sapevo, ha installato PIL. Poi ho scritto un programma che utilizzava una funzione in PIL che non funzionava a causa di un bug all'interno di PIL. Ho iniziato a lavorare su questo problema e qualcuno ha raccomandato di disinstallare PIL e installare Pillow, che ha un'interfaccia migliore per PIL. Così ho fatto:
sudo pip uninstall PIL
sudo pip install Pillow
Quindi, in una nuova finestra di Terminale che avevo appena aperto, ho eseguito uno script Python che includeva la linea:
import Pillow
e viene visualizzato questo messaggio di errore:
Traceback (most recent call last):
File "../HalPy/LandSearch/GetOurLotMap.py", line 7, in <module>
import Pillow
ImportError: No module named Pillow
ma se corro:
pip show Pillow
Ottengo:
---
Name: Pillow
Version: 5.2.0
Location: /Library/Python/2.7/site-packages
Requires:
Ho disinstallato Pillow, quindi l'ho installato con l'opzione --user e l'ho installato nella struttura del mio account Library, ma non funzionava. Ho provato quasi tutte le combinazioni che posso immaginare per installare PIL o Pillow (mai entrambe contemporaneamente), ma non importa cosa faccio, non posso importare Pillow. Python (versione 2.7) non lo riconosce mai come esistente. È lì, ho controllato la directory e pip mostra che è lì, ma non lo è.
Ho installato altri moduli con pip e sono messi nella stessa directory (/Library/Python/2.7/site-packages) e sono riconosciuti.
Come meglio posso dire, dal momento che PIL è incluso nell'installazione di Apple di Python, con tutti i moduli nell'albero della directory /System/Library/Framework/Python.framework/, quando uso pip per installarlo (o Pillow) , è ignorato da Python.
Prima di questo, avevo /Library/Python/2.7/site-packages in PYTHONPATH prima di qualsiasi elenco di qualsiasi directory nell'albero della directory / System. Ho anche, in /Library/Python/2.7/site-packages, un file chiamato bypass-Apple-SIP.pth. Si suppone che l'estensione .pth aiuti a sostituire i moduli nell'albero delle directory / System. All'interno di questo file è:
import sys
sys.path = ['/Library/Python/2.7/site-packages'] + sys.path
Da quello che posso dire, questo ha funzionato prima, ma non avevo a che fare con il tentativo di sostituire qualsiasi modulo che è stato installato di default con l'installazione Python di Apple.
In passato ho usato MacPorts e ho scoperto che odiavo e avevo problemi con Perl (e, penso, con Python). Non voglio usarlo, Fink, Homebrew o qualcosa del genere.
A quanto vedo, mi piacerebbe trovare un modo per fare uno di questi:
- Disinstalla il PIL installato da Apple
- Assicurati che Python assegni la priorità ai moduli in /Library/Python/2.7/site-packages sui moduli preesistenti
- Ottieni Python per vedere le installazioni dei pip dei moduli nella struttura della mia directory home e usarli sui moduli preinstallati
- Qualcos'altro che mi permetta di sovrascrivere i moduli in /System/Library/Frameworks/Python.framework/ se ho problemi con quei moduli preinstallati.
Come posso fare qualcosa di simile a queste idee per usare Pillow over PIL e fare in modo che Python ignori la vecchia versione 1.x di PIL installata da Apple?