Python 3.6 virtualenv 上编译的 Pillow 出错
Error with compiled Pillow on Python 3.6 virtualenv
我正在 运行 与 ubuntu 14 连接一个 linux 框,它 运行 是一个托管 Django 应用程序的 apache2 服务器。
此应用程序从已安装的 Pillow 库中导入 PIL。当我使用 Python 3.5 时一切正常,但是在升级到 Python 3.6 并在 Virtualenv 中重新安装 Pillow 后,当网络服务器尝试导入 PIL 时出现错误。
当我 运行 Python 解释器时,它全部导入正常,因为它直接使用 py 脚本,但是由于网络服务器正在使用已安装和编译的枕头库,它失败了。 Django 的错误显示堆栈如下:
Internal Server Error: /ticket-printing/
Traceback (most recent call last):
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/ubuntu/ipos/tickets/views.py", line 30, in stic_app
PrintList.initiateSticApp(request)
File "/home/ubuntu/ipos/tickets/models.py", line 434, in initiateSticApp
BrandLogo.createBlankLogo()
File "/home/ubuntu/ipos/store_admin/brands/models.py", line 108, in createBlankLogo
from PIL import Image
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/Image.py", line 56, in <module>
from . import _imaging as core
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.py", line 7, in <module>
__bootstrap__()
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: /home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PySlice_AdjustIndices
我尝试通过 pip、easy_install 和 tar.gz setup.py 方法卸载、重新安装 Pillow,但都失败了。
任何指导和帮助将不胜感激。
谢谢
哇,那是一大堆 WTH...
好的,在尝试了几乎所有安装和重新安装 Pillow 的组合之后,我决定看看我的 apache2/mod_wsgi 设置。
事实证明,我使用 Python 2.7 编译的 mod_wsgi 版本无法在调用 Pillow 编译文件时 运行 服务器。
因此,在按照此处的一些说明进行操作后:
https://pypi.python.org/pypi/mod_wsgi
我在我的 virtualenv 中使用了 pip install mod_wsgi,它在我的 virtualenv 的 site-packages/mod_wsgi 文件夹中创建了一个 .so 文件。然后我将该文件复制到 /usr/lib/apache2/modules/mod_wsgi.so-X.X,然后修改 /etc/apache2/mods-enabled/wsgi.load 文件以指向新的 .so-X.X 文件。
重新启动apache2,错误不再出现。
有一天我会明白这些事情...
有一天...
我正在 运行 与 ubuntu 14 连接一个 linux 框,它 运行 是一个托管 Django 应用程序的 apache2 服务器。 此应用程序从已安装的 Pillow 库中导入 PIL。当我使用 Python 3.5 时一切正常,但是在升级到 Python 3.6 并在 Virtualenv 中重新安装 Pillow 后,当网络服务器尝试导入 PIL 时出现错误。
当我 运行 Python 解释器时,它全部导入正常,因为它直接使用 py 脚本,但是由于网络服务器正在使用已安装和编译的枕头库,它失败了。 Django 的错误显示堆栈如下:
Internal Server Error: /ticket-printing/
Traceback (most recent call last):
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/ubuntu/ipos/tickets/views.py", line 30, in stic_app
PrintList.initiateSticApp(request)
File "/home/ubuntu/ipos/tickets/models.py", line 434, in initiateSticApp
BrandLogo.createBlankLogo()
File "/home/ubuntu/ipos/store_admin/brands/models.py", line 108, in createBlankLogo
from PIL import Image
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/Image.py", line 56, in <module>
from . import _imaging as core
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.py", line 7, in <module>
__bootstrap__()
File "/home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.py", line 6, in __bootstrap__
imp.load_dynamic(__name__,__file__)
ImportError: /home/ubuntu/ipos-venv/lib/python3.6/site-packages/Pillow-4.1.0-py3.6-linux-x86_64.egg/PIL/_imaging.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PySlice_AdjustIndices
我尝试通过 pip、easy_install 和 tar.gz setup.py 方法卸载、重新安装 Pillow,但都失败了。
任何指导和帮助将不胜感激。
谢谢
哇,那是一大堆 WTH...
好的,在尝试了几乎所有安装和重新安装 Pillow 的组合之后,我决定看看我的 apache2/mod_wsgi 设置。
事实证明,我使用 Python 2.7 编译的 mod_wsgi 版本无法在调用 Pillow 编译文件时 运行 服务器。
因此,在按照此处的一些说明进行操作后: https://pypi.python.org/pypi/mod_wsgi
我在我的 virtualenv 中使用了 pip install mod_wsgi,它在我的 virtualenv 的 site-packages/mod_wsgi 文件夹中创建了一个 .so 文件。然后我将该文件复制到 /usr/lib/apache2/modules/mod_wsgi.so-X.X,然后修改 /etc/apache2/mods-enabled/wsgi.load 文件以指向新的 .so-X.X 文件。
重新启动apache2,错误不再出现。
有一天我会明白这些事情... 有一天...