2011-07-30 50 views
2

我有一個centos 5,我試圖讓Python圖像庫上下走。我安裝了libjpeg,libjpeg-devel等,但仍然無法將jpeg圖像上傳到我的django網站。Python圖像庫libjpeg錯誤

我重新安裝了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 
-------------------------------------------------------------------- 

任何想法?

謝謝

+1

請更精確什麼您需要採取哪些步驟來查看問題以及您所看到的錯誤回溯。 –

回答

0

什麼在您的models.py文件?你會在你的數據庫中需要這樣的東西。

img = models.ImageField("Foo") 

其中Foo是存儲上傳圖像的地方。 確保你得到的libjpeg-devel的重新安裝PIL之前安裝的,如果不工作,運行

easy_install pil | tee pil.log 

,並張貼在這裏,所以我們可以幫助您進一步。

2

確保您沒有安裝正在使用的不同版本的libjpeg。要檢查它,請嘗試

lsof | grep libjpeg 
1

我有相同的問題並記錄了我的安裝一步一步。這是相當長的:你可以在my blog找到它。

這將幫助你有以下:

  • 工作副本
  • Django的
  • PIL
  • 成像
  • 的libjpeg
  • MySQL的
  • 混帳
  • 阿帕奇
  • mod_wsgi的
  • 的easy_install
  • PIP
  • Django的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的地方寫着「根ALL =(ALL)添加 用戶名ALL =(ALL)

從這裏,你可以改變你的用戶按原樣離開root帳戶。 如果您發現某些項目的不想跑,你應該使用sudo命令

沿的Python 2.4

訣竅的側面安裝Python 2.6,這是讓的Python 2.6在CentOS 5.4的工作不會破壞任何東西是將其安裝在默認的Python 2.4的旁邊。不要嘗試更新默認的Python 2.4,因爲重要的CentOS模塊需要2.4。爲此,您將配置python以安裝在/opt/python2.6中。在你做這一步之前,確保你已經安裝了yum sqlite-devel,因爲python會在你編譯python時尋找sqlite頭文件來爲它構建模塊。

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。此外,使用yum來測試Python 2.4和2.6之間是否存在任何衝突。如果確實有問題,請仔細檢查符號鏈接,並確保您不與/ 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。爲了在Django中使用MySQL,您需要下載,構建和安裝它的擴展。

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與Web服務器接口的方式。我也更喜歡使用它,因爲它安裝快速而且非常簡單。本教程不會設置您的應用程序使用wsgi(但是,我將在最後給出一個示例),但django項目有一個很好的教程。請注意,這一步非常重要。您可能以前使用yum安裝過mod_wsgi,但您需要下載它並使用新的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 

確保一旦模塊被加載

/etc/init.d/httpd restart 

爲您的虛擬主機創建一個單獨的目錄,你的Apache重新啓動

我喜歡的房子我所有的虛擬主機在一個單獨的目錄

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雞蛋目錄的mysite

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

http://mikecantelon.com/story/installing_django_on_centos_5

啓動MySQL服務器

上CENTOS

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

在順序安裝PIP使用成像

/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 [email protected] 
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的。通過運行

hostname "new_name" 

授予權限

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

我覺得這wasnt不夠好,所以我不得不關閉SELinux的

vi /etc/selinux/config 

設置

SELINUX=disabled 

的conf 別的變化根據博客中刪除您-Indexes 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 

確保選中下面的變量設置爲「yes」: 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 

通過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地址,一個你應該看到一個歡迎屏幕!

從這裏開始,您可以開始開發您的應用程序,您應該能夠啓用管理員自動發現並設置網址,以便您可以訪問管理部分。

+0

如果可能的話,請在這裏張貼您的博客條目的簡要摘要,以便後面的這個答案將具有價值,即使您的網站在未來宕機。 –

+0

Thans Chris,我會盡可能地複製和粘貼。 – ApPeL

0

這爲我工作 http://t.co/JfOC1iRi

而要做到安裝從macport所有先決條件後,PIL的乾淨重建,一定要運行以下命令:

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