Ошибки библиотеки изображений Python с помощью libjpeg - PullRequest
2 голосов
/ 30 июля 2011

У меня есть 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 ]

2 голосов
/ 31 июля 2011

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

lsof | grep libjpeg
1 голос
/ 01 августа 2011

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

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

  • Рабочая копия
  • Джанго
  • 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 add». имя пользователя 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. Перед тем, как сделать этот шаг, убедитесь, что у вас установлен sqlite-devel yum, потому что 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

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

Мне нравится размещать всех своих vhosts в отдельном каталоге

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-адреса, чтобы вы могли получить доступ к разделу администратора.

0 голосов
/ 17 ноября 2011

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

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

 $ python setup.py clean
 $ python setup.py build_ext -i
0 голосов
/ 30 июля 2011

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

img = models.ImageField("Foo")

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

easy_install pil | tee pil.log

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

...