簡體   English   中英

mod_wsgi:無法統計Python主目錄和ImportError:沒有名為“ 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)主機和操作系統

  • 托管服務:Amazon AWS EC2
  • 操作系統:Amazon Linux AMI版本2016.03

(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.

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