簡體   English   中英

使用apache + mod_wsgi運行,導入錯誤:由於共享對象要求,無法啟用可執行堆棧:權限被拒絕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM