2011-05-06 54 views
11

我試圖在共享主機(Bluehost)上運行Django。我正在使用需要PIL的功能。 PIL從交互式shell導入和工作,但在我的fcgi過程中,它從PIL導入映像中的MemoryError崩潰。任何幫助,爲什麼它可能會失敗fcgi將不勝感激。Python ctypes從PIL庫fcgi過程中的MemoryError

__Environment Info__: 
Python2.7 

Local installs of libjpg, zlib, freetype, and lcms 

Virtualenv: 
Django 1.3, PIL, flup, etc. 

__Stack Trace__: 

    File ".../feincms_thumbnail.py", line 3, in <module> 
     from PIL import Image 

    File ".../PIL/Image.py", line 45, in <module> 
     \__import__("FixTk") 

    File ".../python2.7/lib-tk/FixTk.py", line 15, in <module> 
     import ctypes 

    File ".../python2.7/ctypes/__init__.py", line 549, in <module> 
     CFUNCTYPE(c_int)(lambda: None) 

__.fcgi__: 

<!-- language: python --> 
    # setup paths 
    # set DJANGO_SETTINGS_MODULE in os.environ 

    from django.core.servers.fastcgi import runfastcgi 
    runfastcgi(method="threaded", daemonize="false") 
+0

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781578 – osa 2015-05-07 04:00:43

回答

23

我暫時固定的錯誤註釋的最後一行在此文件$HOME/lib/python2.7/ctypes/__init__.py這就是說,#CFUNCTYPE(c_int)(lambda: None)

對我來說這是工作,但我不知道究竟是什麼問題。

UPDATE

在蟒蛇2.7.3行號:279不是最後正如我上面所說。

更新2 由於行可能次要版本之間的不同,你應該尋找一個代碼塊,它看起來是這樣的:

# XXX for whatever reasons, creating the first instance of a callback 
# function is needed for the unittests on Win64 to succeed. This MAY 
# be a compiler bug, since the problem occurs only when _ctypes is 
# compiled with the MS SDK compiler. Or an uninitialized variable? 
CFUNCTYPE(c_int)(lambda: None) 
+0

作爲一種替代方法,我修改了Django的使用ImageMagick的,而不是PIL(HTTPS:/從這篇文章摘自/github.com/psidebotham/Django-1.3-ImageMagick-Mod)。我會盡量在接下來的一兩天內嘗試一下你的方法,看看它是否適合我。 – Peter 2011-07-09 05:15:53

+0

+1 - 哈克,但工作。這個問題是否有報道?非常討厭的錯誤,希望有人正在努力。 – shacker 2012-10-21 18:55:07

2

只是爲了擴大eos87的回答了一下,這樣做爲我解決這個問題,並通過在該行之前的評論來判斷,這聽起來像它被添加爲Windows bug的解決方法,但解決方法顯然是造成它自己的麻煩。下面是在__init__.py末位:

# XXX for whatever reasons, creating the first instance of a callback 
# function is needed for the unittests on Win64 to succeed. This MAY 
# be a compiler bug, since the problem occurs only when _ctypes is 
# compiled with the MS SDK compiler. Or an uninitialized variable? 
CFUNCTYPE(c_int)(lambda: None) 

它看起來像它的安全刪除。

FWIW,這個問題在Centos 5.7 x64盒子上顯示出來,當使用Python 2.6作爲安裝(與Python 2.4並行)從epel。該文件是在這裏找到:/usr/lib64/python2.6/ctypes/__init__.py

還要注意的是,顯示了該異常是的MemoryError其中munmap通話後,根據從馬上分段故障strace結果(雖然也許巧合);並且只有在以FastCGI運行時纔會顯示。

+1

我已經解決了這個有點不同 - 請參閱https://bugzilla.redhat.com/show_bug.cgi?id=717404 – Zart 2011-10-30 10:50:06

2

試運行此命令:在CentOS

setsebool -P httpd_tmp_exec on 

我修復的東西。 https://bugzilla.redhat.com/show_bug.cgi?id=645193

+0

這隻會在你的設置中啓用SELinux時起作用。 在其他情況下,我們不得不依賴於我猜測的其他答案.... – 2013-01-24 05:02:30