下載任何 python 套件時都會有一個 setup.py 檔用來,當要安裝這個套件時就會去 Call 這個檔案來設定。setup.py裡面有 entry_points 會記錄要在 Scripts 裡面放哪個指令來 Call 執行的函數。
所以在安裝 django 完後,會在安裝 django 的 envs 中的 Scripts 有 django_admin.exe 這個檔案,而切換虛擬環境時 (conda activate [虛擬環境名稱]) 時會將此環境的 Scripts 寫入 PATH 裡面,表示當我們使用 django_admin 這個指令時,能夠通過 PATH 找到 Scripts 底下的 django_admin.exe 這個執行檔。
執行到 ENV 外的 Python Lib
-
以 Django 為例:
- (ENV) $ django_admin startproject Newproject (可能執行到 ENV 外的 Python Lib)
- (ENV) $ python Env:CONDAPREFIX\Scripts\django_admin.py startproject Newproject (一定會執行到 ENV 中的 Python Lib)
-
原理:
- 直接在 ENV 上輸入 django_admin,雖然 ENV 有安裝到 django 且 Scripts 裡有 django_admin.exe ,但是 Windows 是不知道 django_admin 這個指令在哪的。
- 所以 Windows 會在 PATH 裡查詢,如果別的 django_admin.exe 先被他查詢到的話,會優先執行查詢到的 django_admin.exe
- 所以為了確保執行到正確的 django_admin.exe,下指令時就要直接執行想執行指令的 ENV 中的 django_admin.py,由 Python 去 Call django_admin.py,這樣就會正確執行到 ENV 中的 django_admin.py