uwsgi no python application found錯誤的解決(python3+centos6)


近期在努力把自己的項目從python2轉到python3上,因為生產環境無法拋棄centos7,所以只好在centos7上安裝了python3。裝好了python3,將python命令軟連接改成python3的,同時也將pip指向了python3版本的pip。一切都很順利,但在用uwsgi啟動一個django的web服務時才發現出了問題:服務是啟動了,但是一訪問接口就返回500,再一看uwsgi這邊的日志,顯示:no python application found 。

nginx+uwsgi+django的模式在之前多次配過,都沒有出現問題啊,為啥一到了python3的環境下就出問題了?我的環境應該配置得差不多了啊,而且所有的模塊也都是在python3的環境下裝的啊。

再次檢查了我的配置文件:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /opt/testproj/
wsgi-file = testproj/wsgi.py
processes = 4
threads = 2

感覺也沒有啥問題啊。於是又開始仔細查看uwsgi這邊輸出的日志,再往前看看,才看到了這么個報錯:

*** Operational MODE: preforking+threaded ***
Traceback (most recent call last):
  File "testproj/wsgi.py", line 12, in <module>
    from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***

沒有找到django模塊?原來成功啟動只是一個假象,實際上現在uwsgi沒找到django這個模塊,一提供服務肯定就500了。

但是為啥會沒有找到django模塊呢?uwsgi和django都是用python3的pip來裝的啊,雖然這個centos7上還有python2,但也只是為了讓yum還能正常使用而保留的啊。

在網上一頓找,才發現,uwsgi還真是有點特殊,在python2和python3共存的系統上就會有點問題,這次啟動時無法找到django模塊是因為uwsgi命令使用python2的環境來進行了啟動。需要在配置文件中指定所需要的庫環境才可以。

於是開始找django的環境,使用pip show可以看到django安裝的location:

[root@knktc testproj]# pip show django|grep -i location
Location: /usr/local/lib64/python3.6/site-packages

順便把pytz的路徑也找下:

[root@knktc testproj]# pip show pytz|grep -i location  
Location: /usr/local/lib/python3.6/site-packages

把這兩個路徑使用pythonpath參數加入到配置文件中,修改后的uwsgi配置文件是下面的這個樣子的:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /opt/testproj/
wsgi-file = testproj/wsgi.py
processes = 4
threads = 2
pythonpath = /usr/local/lib64/python3.6/site-packages
pythonpath = /usr/local/lib/python3.6/site-packages

再啟動一次試試:

uwsgi --ini uwsgi.ini
一切正常!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM