Ошибки библиотеки изображений Python с помощью libjpeg

У меня есть Centos 5, и я пытаюсь запустить библиотеку Python Imaging. Я установил libjpeg, libjpeg-devel и т. Д. И все еще не могу загрузить изображения jpeg на мой сайт django.

Я переустанавливал PIL несколько раз. Через PIP, через easy_install2.6 и сборку вручную. Каждый раз, когда он показывает поддержку JPEG, но не позволяет загружать файлы JPEG. Он будет принимать GIF и PNG, хотя.

Я использую python2.6, PIL 1.1.7

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.6.7 (r267:88850, Jul 28 2011, 12:07:21)
              [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------

Есть идеи?

Спасибо

4 ответа

Убедитесь, что у вас не установлена ​​другая версия libjpeg, которая используется. Чтобы проверить это, попробуйте

lsof | grep libjpeg

У меня были те же проблемы и я задокументировал мою установку шаг за шагом. Это довольно долго: вы можете найти его в моем блоге.

Это поможет вам в следующем:

  • Рабочая копия
  • Джанго
  • PIL
  • обработки изображений
  • libjpeg
  • MySQL
  • мерзавец
  • апаш
  • mod_wsgi
  • easy_install
  • зернышко
  • Джанго-imagekit
  • хранение в cdn на CentOS 5.4

Установите Apache, MySQL, SQLite и другие пакеты разработчика

yum install httpd-devel mysql mysql-server
yum install mysql-client mysql-devel
yum install apr-devel sqlite3 sqlite-devel
yum install libjpeg libpng gcc make autoconf
yum install libxslt gettext zlib-devel
yum groupinstall "GNOME Desktop Environment"
yum groupinstall "Development Tools"

В этом руководстве предполагается, что вы используете MySQL в рабочей среде, а также можете использовать SQLite для разработки. Если вы используете другую базу данных, такую ​​как PostgreSQL, вам следует установить эти файлы сейчас. Кроме того, обратите внимание, что это не единственные пакеты, которые вам понадобятся для вашего веб-сервера, это следует рассматривать как минимум, чтобы ваше приложение django работало.

Добавить нового пользователя

groupadd webmaster
useradd -c "username"  -g webmaster -m -s /bin/bash username
passwd username
passw0rd
visudo

Рядом со строкой 77, где написано "root ALL=(ALL) ALL" добавить имя пользователя ALL = (ALL) ALL

Отсюда вы можете перейти к своему пользователю, чтобы оставить учетную запись root как есть. Если вы обнаружите, что некоторые элементы не хотят запускаться, используйте команду sudo

Установите Python 2.6 рядом с Python 2.4

Хитрость в том, чтобы заставить Python 2.6 работать на CentOS 5.4 без каких-либо проблем, состоит в том, чтобы установить его вместе со стандартным Python 2.4. Не пытайтесь обновить ваш Python 2.4 по умолчанию, потому что для важных модулей CentOS требуется 2.4. Для этого вы настроите python для установки в /opt/python2.6. Перед тем, как сделать этот шаг, убедитесь, что у вас установлен yum sqlite-devel, потому что python будет искать заголовочные файлы sqlite, чтобы построить модуль для него при компиляции python.

wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz
tar -zxvf Python-2.6.4.tgz
cd Python-2.6.4
./configure --prefix=/opt/python2.6 --with-threads --enable-shared --with-zlib=/usr/include
make
make install
cd ~

После установки Python в /opt/Python2.6 вам необходимо создать символические ссылки на него.

ln -s /opt/python2.6/lib/libpython2.6.so /usr/lib
ln -s /opt/python2.6/lib/libpython2.6.so.1.0 /usr/lib
ln -s /opt/python2.6/bin/python /usr/local/bin/python
ln -s /opt/python2.6/bin/python /usr/bin/python2.6
ln -s /opt/python2.6/lib/python2.6.so /opt/python2.6/lib/python2.6/config/

Запустите ldconfig, чтобы обновить ссылки на ваши общие библиотеки, а затем проверьте версию Python, чтобы убедиться, что теперь вы можете использовать 2.6. Также проверьте, есть ли конфликты между Python 2.4 и 2.6 с использованием yum. Если у вас возникли проблемы, дважды проверьте символические ссылки и убедитесь, что вы не конфликтуете с / usr / bin / python или /usr/bin/python2.4.

/sbin/ldconfig -v
python -V
yum info httpd

Установите setuptools, расширение MySQL и Django 1.1

Если вы ранее установили setuptools, но вам нужно будет сделать это снова для 2.6, чтобы пакеты были установлены в /opt/python2.6. Чтобы использовать MySQL с Django, вам необходимо скачать, собрать и установить расширение для него.

wget http://bit.ly/6E0DNN 
chmod u+x setuptools-0.6c11-py2.6.egg
./setuptools-0.6c11-py2.6.egg --prefix=/opt/python2.6

wget http://bit.ly/6j4uID
tar -zxvf MySQL-python-1.2.3c1.tar.gz
cd MySQL-python-1.2.3c1
python setup.py build
python setup.py install
cd ..

wget http://www.djangoproject.com/download/1.1.1/tarball/
tar -zxvf Django-1.1.1.tar.gz
cd Django-1.1.1
python setup.py build
python setup.py install
cd ..

Установка и установка mod_wsgi

Большая часть сообщества Django использует wsgi как способ взаимодействия с веб-сервером. Я также предпочитаю использовать его, потому что он быстрый и очень простой в настройке. Этот учебник не будет посвящен настройке вашего приложения для использования wsgi (однако, я приведу пример в конце), но у проекта django есть хороший учебник для этого. Обратите внимание, что этот шаг очень важен. Возможно, вы ранее установили mod_wsgi, используя yum, но вам нужно будет скачать его и собрать его, используя ваш новый 2.6, чтобы он работал с вашим приложением.

wget http://modwsgi.googlecode.com/files/mod_wsgi-2.8.tar.gz 
tar -zxvf mod_wsgi-2.8.tar.gz
cd mod_wsgi-2.8
./configure --with-python=/usr/local/bin/python
make
make install
cd ..

Затем вам нужно будет отредактировать ваш Apache httpd.conf, чтобы загрузить модуль mod_wsgi. После этого перезапустите Apache.

vi /etc/httpd/conf/httpd.conf
LoadModule wsgi_module  /usr/lib64/httpd/modules/mod_wsgi.so
line 787
AddHandler wsgi-script .wsgi

Убедитесь, что ваш Apache перезагружается после загрузки модуля

/etc/init.d/httpd restart

Создайте отдельный каталог для ваших виртуальных хостов

Я люблю размещать всех своих хозяев в отдельном каталоге

cd /etc/httpd/conf
mkdir vhosts
cd vhosts
vi mysite.com.conf

<VirtualHost 127.0.0.1>
    ServerName localhost

    ErrorLog /www/django_test1/mysite/logs/error_log
    CustomLog /www/django_test1/mysite/logs/access_log combined

    UseCanonicalName Off

    Alias /media/ "/www/django_test1/mysite/media/"
    <Directory "/www/django_test1/mysite/media">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>

    Alias /mediaadmin/ "/opt/python2.6/lib/python2.6/site-packages/django/contrib/admin/media/"
    <Directory "/opt/python2.6/lib/python2.6/site-packages/django/contrib/admin/media">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>

    WSGIScriptAlias / /www/django_test1/mysite.wsgi
    WSGIDaemonProcess mysite processes=7 threads=1 display-name=%{GROUP}
    WSGIProcessGroup mysite
    WSGIApplicationGroup %{GLOBAL}
</VirtualHost>

Создайте свой файл mod_wsgi

Согласно нескольким поискам, которые я проводил в Интернете, лучше всего оставить файл mod_wsgi в родительской папке приложения.

mkdir /www
cd /www
mkdir django_test1
cd django_test1
vi mysite.wsgi

#!/opt/python2.6/bin/python

import os, sys

sys.path.append('/www/django_test1/mysite')
sys.path.insert(0, '/www/django_test1')
sys.path.insert(0, '/www/django_test1/mysite')

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
os.environ['PYTHON_EGG_CACHE'] = '/www/django_test1/mysite/.python-eggs'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Сохранить файл

Создайте каталог.python-eggs

в тайне

mkdir .python-eggs
chmod -R 777 .python-eggs

http://mikecantelon.com/story/installing_django_on_centos_5

Запустите сервер MySQL

/etc/rc.d/init.d/mysqld start

Установить PIL на CENTOS

http://athenageek.wordpress.com/2009/06/09/easy_install-pil-not-so-easy/

Установите PIP, чтобы использовать Imaging

/opt/python2.6/bin/easy_install-2.6 pip

/opt/python2.6/bin/pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz

Установить GIT

http://www.bitsandpix.com/entry/git-installing-git-on-centos-5/

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

yum install git

Настройте MySQL с другим пользователем

mysql --user=root mysql
CREATE USER 'webdev'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'webdev'@'localhost'
IDENTIFIED BY 'password' WITH GRANT OPTION;

Создать проект Django

/opt/python2.6/bin/django-admin.py startproject mysite

Создайте каталог журналов в вашем проекте, так как это необходимо для mod_wsgi и apache

cd mysite
mkdir logs

Ссылка на вашу папку администратора

mkdir media
chmod -R 777 media
mkdir mediaadmin

ln -s /opt/python2.6/lib/python2.6/site-packages/django/contrib/admin/media /www/django_test1/mysite/mediaadmin/

Сконфигурируйте ваш файл /etc/httpd/conf/httpd.conf для включения базовых настроек ваших проектов

ServerAdmin admin@appelvm01.centos
HostName appelvm01.centos

ServerName 127.0.0.1

DocumentRoot "/www/django_test1/mysite"

<Directory "/www/django_test1/mysite">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

включить файлы конфигурации VirtualHosts

Include conf/vhosts/*.conf

добавить WSGISocketPrefix в конец файла httpd.conf

WSGISocketPrefix /var/run/wsgi

Убедитесь, что имя хоста совпадает с именем в Apache conf /etc/httpd/conf/httpd.conf, измените его, запустив

hostname "new_name"

Дать разрешения

chcon -R -h -t httpd_sys_content_t /www/django_test1/mysite

Я обнаружил, что это не достаточно хорошо, поэтому мне пришлось отключить SElinux

vi /etc/selinux/config

задавать

SELINUX=disabled

Согласно блогу удалите ваши -индексы http://www.thelinuxblog.com/apache-directory-index-forbidden-by-options-directive/

vi /etc/httpd/conf.d/welcome.conf
# -Indexes
Indexes

Настроить брандмауэр

sudo vi /etc/sysconfig/iptables-config

Убедитесь, что для следующих переменных установлено значение "да": IPTABLES_SAVE_ON_STOP="да" IPTABLES_SAVE_ON_RESTART="да"

Открытые веб-порты:

sudo /sbin/iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
sudo /sbin/iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 443 -j ACCEPT

Перезапустите iptables с помощью: sudo /sbin/service iptables stop sudo /sbin/service iptables start Убедитесь, что правила все еще работают. Попробуйте перезапустить сервер, чтобы убедиться, что настройки выбраны.

Убедитесь, что ваш MySQL и Apache всегда включены после перезагрузки

/sbin/chkconfig --add httpd
/sbin/chkconfig --level 2345 httpd on
/sbin/chkconfig --list httpd

/sbin/chkconfig --add mysqld
/sbin/chkconfig --level 2345 mysqld on
/sbin/chkconfig --list mysqld

Установите South через easy_install, чтобы упростить миграцию БД

/opt/python2.6/bin/easy_install-2.6 South

Установите Django-cumuls для хранения в Rackspace/CDN

/opt/python2.6/bin/pip install django-cumulus

/opt/python2.6/bin/pip install -r http://bitbucket.org/richleland/django-cumulus/raw/0.3.3/requirements.txt

/opt/python2.6/bin/easy_install-2.6 django-imagekit

Теперь вы сможете перейти на IP-адрес вашего сервера, и вы должны увидеть экран приветствия!

С этого момента вы можете начать разработку своего приложения, вы сможете включить автообнаружение администраторов и установить URL-адреса, чтобы вы могли получить доступ к разделу администратора.

Это сработало для меня http://t.co/JfOC1iRi

И чтобы выполнить чистую перестройку PIL после установки всех предварительных требований из macport, обязательно выполните следующее:

 $ python setup.py clean
 $ python setup.py build_ext -i

Что находится в вашем файле models.py? Вам нужно что-то подобное в вашей базе данных.

img = models.ImageField("Foo")

где Foo - место для хранения загруженных изображений. перед переустановкой PIL убедитесь, что у вас установлен libjpeg-devel, и если это не сработает, запустите

easy_install pil | tee pil.log

и разместите его здесь, чтобы мы могли помочь вам в дальнейшем.

Другие вопросы по тегам