我在 Ubuntu Server 14.04 上。
我正在尝试使用 pypy 3.2 来运行 django 应用程序。
但是每当我尝试 pypy3 manage.py runserver 0:8000 时,它都会说:
(fields.E210) 由于未安装 Pillow,因此无法使用 ImageField。
提示:在 https://pypi.python.org/pypi/Pillow 处获取 Pillow 或运行命令“pip install Pillow”。
但是如果我尝试安装 Pillow:
pypy3 -m pip install Pillow
它说:
要求已经是最新的:枕头在/usr/local/lib/python3.4/dist-packages/Pillow-2.9.0-py3.4-linux-x86_64.egg
然后我下载了源代码并尝试:
pypy3 setup.py 安装
它说:
属性错误 install_layout
我不知道该怎么办!!
最佳答案
您应该使用 pypy3 创建一个适当的 virtualenv 作为您的解释器 t 运行您的 django 安装 - 在 virtualenv 中,pip 应该只适用于 django 和 Pillow - 没有像 pypy3 -m pip
这样的奇怪操作,这些操作会像你所拥有的那样受到破坏。
要创建一个其中默认 Python 解释器是 pypy3 的 virtualenv,只需执行 virtualenv -p pypy3 myprojectdir
- 并使用 source myprojectdir/bin/activate
激活它 - 对于惰性类型,有 virtualenv wrapper
可以创建更多快捷方式。从那时起,pip install
任何东西都将在此目录中安装 Thins,而不会从任何其他 Python 中弄乱(或检查)您的系统包。
这就是拥有一个健全的环境的方法——但是它看到你只是试图超越现在可用的东西的边缘——互联网上提到 Pillow 与 Pypy 兼容(当然,与 python3 兼容)——但我找不到任何关于使用 pypy3 运行 Pillow 的提及。
通过在我的 Linux 系统上安装 pypy3-devel
并手动设置 CFLAGS 变量,我可以让它无错误地构建 - (我在这里使用的是 Fedora - 在 Ubunut 上你应该有一个 pypy3-dev
包)。但是即使它确实构建了,它也确实无法在 pypy 上运行,从而引发 ImportError: unable to load extension module 'PIL/_imaging.pypy3-24.so': PIL/_imaging.pypy3-24.so: undefined symbol: PyExc_SystemError
; (在 fedora 22 上设置 CFLAGS=-I/usr/lib64/pypy3-2.4.0/include/
检查您的 pypy3-dev
包以查看这些包含文件在 Ubuntu 上的位置)。
TL;DR 为您的项目使用 pypy2.x 或常规 cPython3.4(当然这是首选) - 这些日子之一依赖项会 catch 。无论哪种方式,Django 都不应该从 Pypy 的 JIT 中获益太多——负载重的网络服务器将不得不处理数据库连接的可扩展性(不是 Python)和良好的缓存(也可以在 Python 之上的层上正确配置——看看“varnish” ”)。如果您对网站因不使用 Pypy 而受到影响的请求进行了大量处理,请考虑使用 celery/RPC 在另一个进程中运行瓶颈算法 - 并编写该部分程序以使用 Pypy/Cython/pure C 运行。
关于python - Pypy 3.2 枕头问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31215883/