Вот некоторые вещи, которые могут вам помочь, если from PIL import Image
работает, но import _imaging
не удается.Если Image
тоже не удается, см. Примечание в конце.
В Ubuntu 13.04 (raring) у меня возникла эта проблема.Оказывается, Ubuntu устанавливает _imaging.so
в месте, которое App Engine не ожидает: /usr/lib/python2.7/dist-packages
вместо /usr/lib/python2.7/dist-packages/PIL
.Так что _imaging.so
не было нигде в sys.path
.
Вот несколько способов обойти это:
Поместите модули PIL C где-нибудь уже на пути:
Я заметил, что /path/to/google_appengine/lib/PIL-1.1.7
был в sys.path
, но каталог не существовал в моей установке.Поэтому я создал каталог и скопировал в него файлы .so, и все заработало.Вам придется делать это снова, каждый раз, когда вы обновляете App Engine SDK, но, по крайней мере, он не мешает разрабатываемому вами коду.
Манипулируйте sys.path в main.py
:
Этот код проверит, запускаем ли мы dev appserver, и, если да, добавим правильный путь к пути.Не проверено, но оно должно работать;)
# 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)
Я полагаю, что это может сделать больше, чем просто модули PIL, доступными для вас, так что это внесет (еще больше) различия между разработкой и производством.Кроме того, эта методика включает в себя изменение исходного кода вашего приложения, что кажется плохим вызовом, если его разрабатывает более одного человека.
Примечание : если import Image
не удаетсяВозможно, вы забыли добавить библиотеку PIL в app.yaml
.
libraries:
- name: PIL
version: "latest"
. После добавления этой библиотеки может потребоваться перезапустить dev_appserver.py
, чтобы изменения отображались, например, в интерактивной консоли.