1

Ich versuche, den Cloudstorage von Google App Engine zusammen mit Django 1.8 zu verwenden (via Djangae, obwohl das hier nicht relevant sein sollte). Ich versuche hauptsächlich, den Datei-Upload über den Admin zum Laufen zu bringen.Django auf Google App Engine - Kein Modul namens PIL._imaging

Wenn tatsächlich installiert alles funktioniert, kann ich Dateien ohne Probleme hochladen. Wenn ich dieselben Dinge lokal ausführe, bekomme ich den folgenden Importfehler von PIL's Image.py.

No module named PIL._imaging

In diesem Setup Django einen lokalen sitepackages Ordner verwendet, wo PIL und Kissen installiert ist, die ein Teil des Problems zu sein scheint. Wenn ich Python direkt im Terminal starte (nachdem ich es global installiert habe), kann ich _imaging einfach importieren.

Irgendwelche Ideen? Dies ist auf OSX El Capitan und ich habe einige Leute sagen, dass dies mit ähnlichen Problemen verbunden sein könnte, aber nichts, was ich bisher gefunden habe, hat geholfen.

Antwort

0

Per der documentation, erhalten Sie eine eingewickelt "Bilder API" zu verwenden:

from google.appengine.api import images 

Googles images API macht dann Verwendung von PIL oder Kissen auf dem Back-End. Wenn ich Sie wäre, würde ich versuchen, google.appengine.api.images, nicht direkt PIL zu verwenden. Dann würden Sie das Dokument korrekt API verwenden.

Wenn Sie jedoch schwören, dass die Verwendung von PIL direkt in der Produktion funktioniert, können Sie es möglicherweise lokal bearbeiten, indem Sie den C-Bibliothek-Teil "Whitelisting" hinzufügen. Sie können dies tun:

PRODUCTION_MODE = not os.environ.get(
    'SERVER_SOFTWARE', 'Development').startswith('Development') 
if not PRODUCTION_MODE: 
    from google.appengine.tools.devappserver2.python import sandbox 
    sandbox._WHITE_LIST_C_MODULES += YOUR_MODULE_LIST 

In YOUR_MODULE_LIST, werden Sie herausfinden müssen, was C-Module Teil Ihrer PIL-Installation sind.

Aber noch einmal, der Weg zu gehen ist Google API verwenden, nicht versuchen, PIL direkt zu verwenden.

+0

Wenn das der Fall wäre, würde ich einen Fehler beim Importieren von PIL bekommen, was nicht der Fall ist. Der Fehler tritt in PIL auf, wenn er versucht, eine c-Bibliothek zu verwenden. –

+0

Entschuldigung, Sie haben Recht. In den Dokumenten verwenden Sie tatsächlich eine umschlossene API, während Sie PIL direkt verwenden. Sie könnten versuchen, das C-Modul auf die weiße Liste zu setzen, aber Sie sollten wahrscheinlich in Erwägung ziehen, die bereitgestellte API zu verwenden. Ich aktualisiere meine Antwort entsprechend. –

+0

@KenKinder die Dokumente sagen tatsächlich PIL wird unterstützt https://cloud.google.com/appengine/docs/python/tools/built-in-libraries-27 – user1778606