前言
隨著專案的增加, 常常會有需要去裝不同的 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 唷
不然就沒效果囉~~

![[Power BI] Data Cleansing #1](https://static.coderbridge.com/images/covers/default-post-cover-2.jpg)
