Ошибка со скомпилированной подушкой на Python 3.6 virtualenv

Я использую Linux с Ubuntu 14, он запускает сервер apache2, на котором размещено приложение Django. Это приложение импортирует PIL из установленной библиотеки Pillow. Все работало нормально, когда я работал на Python 3.5, однако после обновления до Python 3.6 и переустановки Pillow в Virtualenv я получаю сообщение об ошибке, когда веб-сервер пытается импортировать 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

Я пытался удалить, переустановить Pillow с помощью pip, easy_install и метода tar.gz setup.py, но все потерпело неудачу.

Любые рекомендации и помощь будут высоко оценены.

Спасибо


person Omar    schedule 27.04.2017    source источник
comment
Какая у вас версия подушки? Вы можете столкнуться с проблемами совместимости при установке определенной версии с использованием Python 3.6.x: pillow .readthedocs.io/en/4.1.x/installation.html#notes Если вы используете virtualenv, я думаю, у вас есть конкретная старая версия Pillow в файле requirements.txt.   -  person Q Caron    schedule 27.04.2017
comment
Я пробовал и 4.0.0, и 4.1.0, первый отлично работал с Python 3.5.   -  person Omar    schedule 28.04.2017


Ответы (1)


Вау, это была целая куча WTH...

Итак, перепробовав почти все комбинации установки и переустановки Pillow, я решил взглянуть на свои настройки apache2/mod_wsgi.

Оказывается, моя версия mod_wsgi, скомпилированная с Python 2.7, не могла запускать сервер при вызове скомпилированных файлов Pillow.

Итак, следуя некоторым инструкциям здесь: https://pypi.python.org/pypi/mod_wsgi

Я использовал pip install mod_wsgi в своем виртуальном окружении, который создал файл .so в папке site-packages/mod_wsgi моего виртуального окружения. Затем я скопировал этот файл в /usr/lib/apache2/modules/mod_wsgi.so-X.X, а затем изменил файл /etc/apache2/mods-enabled/wsgi.load, чтобы он указывал на новый файл .so-X.X.

Перезапустил apache2 и ошибка снова перестала появляться.

Однажды я пойму эти вещи... Однажды...

person Omar    schedule 28.04.2017
comment
Ничего себе, точно такой же сценарий, спасибо @QCaron за ссылку и продолжение - person Omar; 29.04.2017