2020年1月21日 星期二

Python 學習筆記 : Django 2 測試 (五) : 在虛擬環境中佈署網站

一直以來我都直接在 Win10 系統下使用本機安裝的 Python 3.7 與 Django 2 測試 Django 網站, 但最近安裝測試 Django 的 CMS 應用程式 Mezzanine 時, 發現它會將本機的 Django 2 移除改成 Django 1.11.27 版, 參見 :

Django CMS Mezzanine 測試 (一) : 安裝與系統設定

這才發覺虛擬環境的好處, 測試時用虛擬環境才不會改變本機的執行環境. Python 虛擬環境操作相關指令如下表 :


 虛擬環境指令 說明
 pip install virtualenv 安裝虛擬環境套件
 virtualenv venv 在目前目錄下建立虛擬環境子目錄 venv
 cd venv 切換至虛擬環境子目錄 venv
 Scripts\activate 啟動虛擬環境
 pip install django==2.2.9 在虛擬環境下安裝 Django 2.2.9
 deactivate 關閉虛擬環境


1. 安裝 virtualenv 套件 : 

Python 的虛擬環境套件是 virtualenv, 我之前就已在 Swift5 Win10 筆電上安裝過, 所以用 pip3 instal 加 -U 選項安裝新版 : 

C:\Users\User>pip3 install virtualenv -U   
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/05/f1/2e07e8ca50e047b9cc9ad56cf4291f4e041fa73207d000a095fe478abf84/virtualenv-16.7.9-py2.py3-none-any.whl (3.4MB)
Installing collected packages: virtualenv
  Found existing installation: virtualenv 16.7.5
    Uninstalling virtualenv-16.7.5:
      Successfully uninstalled virtualenv-16.7.5
Successfully installed virtualenv-16.7.9

安裝好 virtualenv 套件後就可以利用它來建立虛擬環境了.


2. 建立虛擬環境 : 

安裝好後就可以建立虛擬環境了, 以下測試將在 D:\tmp 下建立一個虛擬環境目錄 venv (自訂名稱) :

D:\tmp>virtualenv venv         (建立一個虛擬環境目錄 venv)
Using base prefix 'c:\\python37'
New python executable in D:\tmp\venv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.

此指令會在當前目錄 D:\tmp 下建立一個虛擬環境目錄 venv, 切換到 venv 子目錄, 其結構如下 :




其中的 Scripts 子目錄下有操作虛擬環境的相關指令檔, 主要是 :

  • activate (啟動虛擬環境)
  • pip/pip3 (安裝套件)
  • deactivate (退出虛擬環境)

整個虛擬環境目錄初始大小約 24MB 左右 :




然後切換到虛擬環境目錄 venv 下, 執行 Scripts\activate 指令啟動虛擬環境 :

D:\tmp>cd venv 
D:\tmp\venv>Scripts\activate   

(venv) D:\tmp\venv>

這時路徑前面會出現 (venv) 表示目前是在虛擬環境中.

接著可用 pip install django 安裝最新版 Django, 由於 Django 在 2019 年底發布了第三版, 只要差異是支援了非同步 ASGI 以及 MriaDB 等, 另外在語系設定上也與第二版不同, 第二版最後版本為 2.2.9, 因此若要使用第二版與指定版本, 例如 :

(venv) D:\tmp\venv>pip install django==2.2.9 
Collecting django==2.2.9
  Downloading https://files.pythonhosted.org/packages/cb/c9/ef1e25bdd092749dae74c95c2707dff892fde36e4053c4a2354b2303be10/Django-2.2.9-py3-none-any.whl (7.5MB)
Collecting sqlparse
  Using cached https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Collecting pytz
  Using cached https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl
Installing collected packages: sqlparse, pytz, django
Successfully installed django-2.2.9 pytz-2019.3 sqlparse-0.3.0

可見除了安裝 Django 2 之外, 還會安裝 pytz 與 sqlparse 這兩個相依套件. 用 pip list 檢視虛擬環境中已安裝套件 :

(venv) D:\tmp\venv>pip list 
Package    Version
---------- -------
Django     2.2.9
pip        19.3.1
pytz       2019.3
setuptools 45.1.0
sqlparse   0.3.0
wheel      0.33.6

這就是架設 Django 最純淨的環境, 安裝完 Django 2 之後虛擬環境目錄 venv 大小約 48.3MB. 如果需要用到爬蟲功能, 可再用 pip install 安裝 requests 與 beautifulsoup 等套件.


3. 在虛擬環境中建立 Django 專案 :

接下來就可以在此虛擬環境中建立 Django 專案了, 過程與在本機 Python 環境中的作法一樣,  參考 :

Python 學習筆記 : Django 2 測試 (一) : 請求與回應處理

首先在虛擬環境目錄 venv 下用 django-admin startproject mysite 建立一個名為 mysite 的專案 :

(venv) D:\tmp\venv>django-admin startproject mysite    (建立專案)

(venv) D:\tmp\venv>cd mysite     (切換到第一層專案目錄)

(venv) D:\tmp\venv\mysite>python manage.py runserver   (啟動伺服器)
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 21, 2020 - 00:34:03
Django version 2.2.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

可見開發伺服器已順利啟動, 開啟瀏覽器連線 http://127.0.0.1:8000/ 即可看到預設之專案網頁了 :




另外參考下面這篇, 將之前在本機中的 mysite 專案目錄複製到 D:\tmp\venv 目錄下覆蓋上面的初始 mysite 專案目錄 :

Python 學習筆記 : Django 2 測試 (三) : 模板的匯入與繼承




結果與在本機環境一樣, 虛擬環境的好處就是可以在特定之 Python 與 Django 環境下開發專案, 而不會受到本機的版本限制.


4. 退出虛擬環境 : 

先按 CTRL+C 終止開發伺服器, 然後用 deactivate 指令即可退出 Python 虛擬環境 :

(venv) D:\tmp\venv\mysite>deactivate   
D:\tmp\venv\mysite>

前面的 (venv) 消失了, 表示已退出 Python 虛擬環境. 如果測試完不再使用這個虛擬環境, 只要將整個目錄刪除即可.

沒有留言 :