[英]Python Flask using mod_wsgi in Apache; how to get venv to work?
我一直在努力讓它發揮作用,到處搜索,上下翻頁,但似乎沒有找到答案。
我有帶有 mod_wsgi 的 Apache 和一個簡單的測試 Flask 應用程序。
我用這個讓它工作: https://www.jakowicz.com/flask-apache-wsgi/
然后我以某種方式發現 Apache mod_wsgi 使用了系統 python 並且我想使用 venv ( https://docs.python.org/3/library/venv.html )。
我的應用程序位於具有 venv 正常目錄結構的目錄中,但如何讓我的應用程序使用它?
我發現了這個: http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html
但是,如果我放入 python-home,我的應用程序就會失敗。
幾個問題:如何找到我的應用程序使用的 Python 版本? 我如何找到我的 mod_wsgi 版本? 如何讓我的應用程序使用我的 venv?
我是 Python 和 WSGI 的新手,我主要使用 PHP。
希望有人可以向我解釋該怎么做...
-- 羅尼
如何找到我的應用程序正在使用的Python版本?
請參閱文檔:
它為您提供了可以使用的測試。
我如何找到我的mod_wsgi版本?
使用WSGI environ
詞典中的mod_wsgi.version
鍵。 請參閱以下內容中的參考:
您還可以使用:
import mod_wsgi
print(mod_wsgi.version)
如何獲得我的應用程序以使用我的venv?
可以在以下位置找到有關使用虛擬環境的文檔:
如狀態所示,如果您的mod_wsgi使用系統Python,並且您想使用其他Python安裝或版本,則不能強制其使用其他安裝或版本。 必須針對要使用的特定Python版本編譯mod_wsgi二進制文件。
由於系統mod_wsgi軟件包通常是較舊的版本,而不是您要使用的Python版本,因此您應卸載系統mod_wsgi軟件包,並針對要使用的Python版本從源代碼安裝mod_wsgi。 為此,最簡單的安裝方法是使用pip install mod_wsgi
。 看到:
繼續問題的評論部分中的討論:
假設以下目錄具有在/venv
文件夾中創建的虛擬環境:
- main.py
- /static
- /js
- /html
- /css
- /venv
- /bin
- activate
要激活虛擬環境,從而使用Python的本地副本(而不是全局副本),必須使用以下命令:
. /venv/bin/activate
的.
本質上是告訴終端窗口必須執行位於/venv/bin
(假設我們在上述目錄的頂層)中的activate
文件。 當您在終端窗口中的新行的開頭看到字符串(venv)
時,您將知道命令成功。
現在, which
命令將確認您正在使用Python的本地副本:
which python
現在您的虛擬環境已激活,您可以使用pip在該虛擬環境中本地安裝所需的任何模塊。 您可以根據需要指定安裝模塊的特定版本,也可以僅安裝最新版本。 瓶或Apache的,你安裝的版本取決於您指定安裝時什么。
最后,命令python --version
將告訴您此Python 2副本的版本python3 --version
將對Python 3執行相同的操作。每當您使用此Python本地副本執行腳本時,它將使用此Python。版。
要從腳本中獲取Python版本:
from sys import version_info
print version_info
輸出(取決於您的版本,但是看起來像這樣):
sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0)
我發現最好和最優雅的方法是簡單地指定位於環境本身內的 python 解釋器。 只需使用以下命令啟動您的 wsgi 文件:
#!/path/to/your/venv/bin/python
等等。
我寫了一篇關於這個主題的博客文章,希望它能有所幫助。 最重要的是,與mod_wsgi關聯的python版本需要匹配pip虛擬環境中使用的python版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.