給Python一個虛擬的家...還有在開發時為了保護Secret的Safe place...


Posted by jerryeml on 2021-07-10

前言

隨著專案的增加, 常常會有需要去裝不同的 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) 中,是開發時常見的手段,不僅可以避免將重要的資料不小心 commitcodebase 之外,也可以利用環境變數儲存系統或程式設定,實務上也經常利用環境變數區隔開發環境 (development) 與生產環境 (production) ,例如:

if os.getenv('MODE') == 'development':
    # do development-related things
    pass
else:
    # do production-related things
    pass

前置準備作業

  • Python裝好裝滿 建議裝3以上
  • VSCode 裝好裝滿

建置一個獨立的 python 虛擬環境

VSCode 中開啟 Project 按下 F5Terminal 也順便開起來

從上圖會發現你現在吃的python path 是你的實體電腦的路徑

接下來我們可以嘗試在 Terminal 打上
python -m venv .venv

你會看到在 projectroot 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
不然就沒效果囉~~

Reference

https://pypi.org/project/python-dotenv/


#Python #venv #python-dotenv







Related Posts

Day 12-Scope & Number Guessing Game

Day 12-Scope & Number Guessing Game

[Py 百日馬 Day 5] for 迴圈 (for loop)

[Py 百日馬 Day 5] for 迴圈 (for loop)

Airflow 動手玩:(四)淺談 Airflow 架構

Airflow 動手玩:(四)淺談 Airflow 架構


Comments