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