Ecco alcune cose che potrebbero essere utili se from PIL import Image
funziona ma import _imaging
non riesce. Se anche Image
fallisce, vedere la Nota alla fine.
Su Ubuntu 13.04 (raro), ho avuto questo problema. Risulta che Ubuntu installa _imaging.so
in un posto che App Engine non si aspetta: /usr/lib/python2.7/dist-packages
anziché /usr/lib/python2.7/dist-packages/PIL
. Quindi _imaging.so
non era da nessuna parte in sys.path
.
Qui ci sono un paio di modi per aggirare questo:
Mettere i moduli PIL C da qualche parte già presenti sul percorso:
ho notato che /path/to/google_appengine/lib/PIL-1.1.7
era in sys.path
, ma la directory non esisteva nella mia installazione . Così ho creato la directory e copiato i file .so e tutto ha funzionato. Si dovrebbe fare di nuovo questo, ogni volta che hai aggiornato l'App Engine SDK, ma almeno non lo fa confusione con il codice che si sta sviluppando.
Manipolare sys.path in main.py
:
Questo codice controlla se stiamo correndo l'appserver dev, e in caso affermativo, aggiungere il dir corretta al percorso. Non testato ma dovrebbe funzionare;)
# Find _imaging.so and put its directory here.
# `locate _imaging.so` or `dpkg -L python-imaging`
PIL_PATH = '/usr/lib/pyshared/python2.7/'
PRODUCTION_MODE = not os.environ.get(
'SERVER_SOFTWARE', 'Development').startswith('Development')
if not PRODUCTION_MODE:
sys.path.insert(PIL_PATH)
suppongo che questo potrebbe rendere più che i moduli Pil disponibili a voi, in modo che sarebbe introdurre (ancora di più) le differenze tra lo sviluppo e la produzione. Inoltre, questa tecnica comporta la modifica del codice sorgente della tua app, che sembra una brutta chiamata se c'è più di una persona che la sviluppa.
Nota: se import Image
fallisce, si potrebbe aver dimenticato di aggiungere la libreria PIL al app.yaml
.
libraries:
- name: PIL
version: "latest"
Potrebbe essere necessario riavviare il dev_appserver.py
dopo l'aggiunta di questa libreria affinché le modifiche rifletteranno nel esempio la console interattiva.
Ho avuto lo stesso problema. L'installazione pulita di ** PIL 1.1.7 ** (attualmente più recente) sopra l'installazione pulita su ** python 2.7.8 ** (attualmente più recente) ha risolto il problema. Assicurati che il tuo python 2.7 sia ** 32-bit **. –