前言
隨著專案的增加, 常常會有需要去裝不同的 python module
像是 pip install request
pip install nose
pip install bla_bla_bla
但如果時間一久, 會不會忘記你到底裝過甚麼, 或是裝一裝會不會把你的 local
電腦的 python package
整個弄髒呢?
我們可以使用 venv
這個 python module
幫你建立一個專屬於專案的虛擬環境
這樣就可以把保持local python
的清潔度囉
然而會在介紹 dotenv
這個 module
將一些重要的資料存在環境變數 (environment variable)
中,是開發時常見的手段,不僅可以避免將重要的資料不小心 commit
進 codebase
之外,也可以利用環境變數儲存系統或程式設定,實務上也經常利用環境變數區隔開發環境 (development)
與生產環境 (production)
,例如:
if os.getenv('MODE') == 'development':
# do development-related things
pass
else:
# do production-related things
pass
前置準備作業
- Python裝好裝滿 建議裝3以上
- VSCode 裝好裝滿
建置一個獨立的 python 虛擬環境
在 VSCode
中開啟 Project
按下 F5
把 Terminal
也順便開起來
從上圖會發現你現在吃的python path 是你的實體電腦的路徑
接下來我們可以嘗試在 Terminal
打上
python -m venv .venv
你會看到在 project
的 root path
上面多了一個 folder
叫做 .venv
這個東西就是 python
的一個虛擬環境啦~
接著要把 VSCode
讀取 Python
的位置要修正一下
把你要讀取的位置選下去!!!
接著把 Terminal
重啟後 就可以看有沒有成功囉
把 requirements.txt
重新 pip
進去 就大功告成囉
利用 dotenv 讀取敏感性資料
pip install python-dotenv
python-dotenv
的運作十分簡單,預設 python-dotenv
會載入 .env
檔案,然後將設定寫入環境變數之中,接著就能夠透過 os.getenv(key, default=None)
取得環境變數中的值
或是利用 os.environ['key']
取得環境變數的值
兩者不同的地方在於 後者如果找不到value 會直接爆裂 raise exception
.env檔案大概會長的如下
github_ee_token="!@#$%^&*"
github_ee_mgcp_token="haha"
AWS_ACCESS_KEY_ID="jerry"
AWS_SECRET_ACCESS_KEY="eml"
也可以接受變數中可以再放入變數
github_ee_token="!@#$%^&*"
github_ee_mgcp_token="haha"
AWS_ACCESS_KEY_ID="jerry"
AWS_SECRET_ACCESS_KEY="eml"
AWS_CONN_STR=${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}
準備好 .env 之後,就能簡單透過呼叫 load_dotenv() 載入 .env 檔,例如載入前面範例的 .env 檔:
import os
from dotenv import load_dotenv
print('Before load_dotenv()', os.getenv('AWS_CONN_STR'))
load_dotenv()
print('After load_dotenv()', os.getenv('AWS_CONN_STR'))
結果會如下
Before load_dotenv() None
After load_dotenv() jerry:eml
You will probably want to add .env to your .gitignore, especially if it contains secrets like a password.
See the section "File format" below for more information about what you can write in a .env file.
記得把敏感的 .env
加入 gitignore
唷
不然就沒效果囉~~