如果from PIL import Image 有效但import _imaging 失败,这里有一些可能会对您有所帮助。如果Image 也失败了,请查看末尾的注意。
在 Ubuntu 13.04(稀有)上,我遇到了这个问题。事实证明,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 时,您都必须再次执行此操作,但至少不会与您正在开发的代码混淆。
操纵main.py中的sys.path:
此代码将检查我们是否正在运行开发应用服务器,如果是,则将正确的目录添加到路径中。未经测试,但它应该可以工作;)
# 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 以使更改反映在例如交互式控制台。