![](/img/trans.png)
[英]mod_wsgi: ImportError: No module named 'encodings'
[英]mod_wsgi: Unable to stat Python home and ImportError: No module named 'encodings'
我正在尝试使用Django和Python 3.5.2上的mod_wsgi在Apache 2.4上构建一个网站。 但是当启动apache守护程序httpd时,在/ var / log / httpd / error_log上输出以下错误消息。
[2016年9月16日星期五17:44:57.145900] [wsgi:warn] [pid 20593](13)权限被拒绝:mod_wsgi(pid = 20593):无法统计Python home /home/ec2-user/.pyenv/versions/ 3.5.2。 Python解释器可能无法正确初始化。 验证提供的路径和整个路径的访问权限。
致命的Python错误:Py_Initialize:无法获取区域设置编码
ImportError:没有名为“编码”的模块
因此,我浏览了一些有关类似问题的文章,例如
但是上述错误消息的原因尚未解决。
请指出一些要检查的点或要阅读的文件等。
我的开发环境如下。
(1)主机和操作系统
(2)Django项目
我使用用户帐户ec2-user在目录/ home / ec2-user / django-sites中创建了名为testprj的 Django项目。
[ec2-user@MyEC2 django-sites]$ pwd
/home/ec2-user/django-sites
[ec2-user@MyEC2 django-sites]$ ls -l
total 4
drwxrwxr-x 3 ec2-user ec2-user 4096 Sep 16 14:50 testprj
testprj使用的数据库已经建立。 因此,Django中提供的开发服务器已成功启动,没有出现以下错误。
[ec2-user@MyEC2 testprj]$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
September 16, 2016 - 14:23:47
Django version 1.10.1, using settings 'testprj.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
(3)Python环境
我通过pyenv install 3.5.2
安装了Python pyenv install 3.5.2
。 然后我设置pyenv virtualenv 3.5.2 django-sites
。 我将/ home / ec2-user / django-sites的本地设置为env django-sites如下。
[ec2-user@MyEC2 django-sites]$ pwd
/home/ec2-user/django-sites
[ec2-user@MyEC2 django-sites]$ pyenv versions
system
3.5.2
3.5.2/envs/django-sites
* django-sites (set by /home/ec2-user/django-sites/.python-version)
[ec2-user@MyEC2 django-sites]$ python -V
Python 3.5.2
我通过pip命令安装了以下模块。
[ec2-user@MyEC2 django-sites]$ pwd
/home/ec2-user/django-sites
[ec2-user@MyEC2 django-sites]$ pip list
configparser (3.5.0)
Django (1.10.1)
mod-wsgi (4.5.7)
pip (8.1.2)
PyMySQL (0.7.9)
setuptools (27.2.0)
(4)Web服务器
我使用的Web服务器是Apache 2.4。
[ec2-user@MyEC2 ~]$ httpd -v
Server version: Apache/2.4.23 (Amazon)
Server built: Jul 29 2016 21:42:17
用户和执行的Apache组都阿帕奇如/etc/httpd/conf/httpd.conf中下一行。
User apache
Group apache
(5)Django项目testprj的附加conf文件
我打算进行配置,以使URL
http://[MyEC2 domain]/testprj/
可以访问位于/ home / ec2-user / django-sites / testprj的Django项目的首页。
上面的[MyEC2域]就像
ec2-XX-XX-XX-XX.us-west-2.compute.amazonaws.com
所以,我在下面的/etc/httpd/conf.d中写了testprj.conf 。
[ec2-user@MyEC2 conf.d]$ pwd
/etc/httpd/conf.d
[ec2-user@MyEC2 conf.d]$ cat -n testprj.conf
1 LoadModule wsgi_module /home/ec2-user/.pyenv/versions/django-sites/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
2
3 WSGIPythonHome /home/ec2-user/.pyenv/versions/3.5.2
4 WSGIScriptReloading On
5 WSGIScriptAlias /testprj/ /home/ec2-user/django-sites/testprj/testprj/wsgi.py
6 WSGIPythonPath /home/ec2-user/django-sites/testprj:/home/ec2-user/.pyenv/versions/django-sites/lib/python3.5/site-packages
7
8 <VirtualHost *:80>
9
10 ServerName http://ec2-XX-XX-XX-XX.us-west-2.compute.amazonaws.com
11 SuexecUserGroup apache apache
12
13 <Directory /home/ec2-user/django-sites/testprj/testprj>
14 <Files wsgi.py>
15 Require all granted
16 </Files>
17 </Directory>
18
19 Alias /static/ "/home/ec2-user/django-sites/testprj/static/"
20
21 <Directory /home/ec2-user/django-sites/testprj/static>
22 <Files *>
23 Require all granted
24 </Files>
25 </Directory>
26
27 </VirtualHost>
28
[ec2-user@MyEC2 conf.d]$
最好的祝福。
需要检查的几件事。
pyenv工具默认情况下不使用共享库安装Python。 可能会导致问题,因为mod_wsgi需要共享库。 您需要明确告诉pyenv使用共享库构建Python。
许多Linux系统上的主目录对其他用户不可读。 初始化mod_wsgi时,它以Apache用户身份运行,并且无法在主目录内部看到。 当Apache以root身份运行时,Apache加载了mod_wsgi模块时没有问题。
您的配置还有其他一些问题,这些问题没有遵循最佳实践,但是上述问题(尤其是第二项)可能是导致问题的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.