[英]Run with apache + mod_wsgi, Import error: cannot enable executable stack as shared object requires: Permission denied
我在Flask和mod_wsgi中使用apache。 當我在Flask腳本中導入scipy模塊時,出現此錯誤。
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/site-packages/pymatgen/electronic_structure/plotter.py", line 671, in get_plot3
[Thu Oct 15 18:15:45 2015] [error] import scipy.interpolate as scint
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/site-packages/scipy/interpolate/__init__.py", line 145, in <module>
[Thu Oct 15 18:15:45 2015] [error] from .interpolate import *
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 16, in <module>
[Thu Oct 15 18:15:45 2015] [error] import scipy.special as spec
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/site-packages/scipy/special/__init__.py", line 608, in <module>
[Thu Oct 15 18:15:45 2015] [error] from ._ellip_harm import ellip_harm, ellip_harm_2, ellip_normal
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/site-packages/scipy/special/_ellip_harm.py", line 7, in <module>
[Thu Oct 15 18:15:45 2015] [error] from ._ellip_harm_2 import _ellipsoid, _ellipsoid_norm
[Thu Oct 15 18:15:45 2015] [error] File "scipy/special/_ellip_harm_2.pyx", line 2, in init scipy.special._ellip_harm_2 (scipy/special/_ellip_harm_2.c:7444)
[Thu Oct 15 18:15:45 2015] [error] File "/usr/local/lib/python2.7/ctypes/__init__.py", line 10, in <module>
[Thu Oct 15 18:15:45 2015] [error] from _ctypes import Union, Structure, Array
[Thu Oct 15 18:15:45 2015] [error] ImportError: /usr/local/lib/python2.7/lib-dynload/_ctypes.so: cannot enable executable stack as shared object requires: Permission denied
我該如何解決?
我想您正在使用支持SELinux的發行版(如CentOS)。 當您的應用程序使用mod_wsgi
在Apache后面時,必須將標簽httpd_sys_script_exec_t
設置為共享對象文件,然后才能訪問它們。
在以下示例中,我將假設您的應用程序位於/var/www/myapp
目錄中,並且Python 2.7 virtualenv位於/var/www/myapp/venv
並且Numpy和Scipy也安裝在該virtualenv中。
您可以使用semanage
永久添加新的SELinux策略:
semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/myapp/venv/lib/python2.7/site-packages(/.*)?"
然后您可以使用restorecon
激活它們:
restorecon -R /var/www/myapp/venv/lib/python2.7/site-packages/
如果在具有共享對象文件的virtualenv中安裝新軟件包,則必須再次運行restorecon
命令(或重新啟動)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.