iT邦幫忙

2023 iThome 鐵人賽

DAY 29
1
Software Development

Python 微進階系列 第 29

Python 微進階 Day29 - venv(虛擬環境)與 env(環境變數)

  • 分享至 

  • xImage
  •  

venv(虛擬環境)

  • 就如同下面那張圖一樣,Python 的虛擬環境管理其實並不統一,所以常會讓人眼花撩亂,本篇主要依我自己經驗來介紹幾種常見的方式,大家可以依自己的需求與習慣來做搭配與調整,然後再點套件連結或參考連結去確認詳細語法
  • 因為虛擬環境通常都是在建立時依照 Python 當下的版本來建立,並不會一起建立或指定 Python 版本,因此就有
    • 自己切換 Python 版本後,再安裝相關的環境套件
    • 在建立環境時一併指定 Python 版本
  • 因此我主要分成 2 種類型
    • 管理或切換 Python 版本:pyenv、conda
    • 管理套件版本或相依性:venv、virtualenv、pipenv、Poetry、conda
  • 個人推薦搭配
    • pyenv + venv:利用 pyenv 切換不同版本,再使用 Python 內建的 venv 建立環境
    • conda:在建立虛擬環境時一併指定版本,若想解省空間可以改使用 miniconda
  • 有些套件本身也僅稍微研究過,若有理解錯誤的部分也請大家提供回饋

https://xkcd.com/1987/

套件介紹

env(環境變數)

  • 通常會將一些重要的資料存在環境變數,如 DB 的設定或帳號密碼等
  • 也可用來區分開發環境和正式環境
  • 利用 python-dotenv 來讀取設定的 .env 檔內的環境變數
    • 套件安裝為 python-dotenv,pip install python-dotenv
    • import 為 dotenv,from dotenv import load_dotenv
  • .env 內的格式為 key=value 的形式
.env
name=env
mode=dev

import os
from dotenv import load_dotenv

load_dotenv()

print(os.environ.get("name"))
# env
print(os.environ.get("mode"))
# dev

小補充:

# .env
name=env


# test.py
import os

print(os.environ.get("name"))

# terminal 環境下執行 python test.py
# None

# vscode 使用 run and debug
# env
# 預設會讀取 .env 內的環境變數
# vscode 的 lauch.json 設定 envFile
# 會在 run and debug 時,改去載入指定的 dev.env
# 而不是預設的 .env

"configurations": [
    {

        "envFile": "${workspaceFolder}/dev.env"
    }
# 直接在 vscode 的 lauch.json 設定環境變數 name=env

"configurations": [
    {

        "env": {
                "name": "env",
                }
    }

參考資料

次回

總算進到最後一天了!


上一篇
Python 微進階 Day28 - type hint(型別提示)
下一篇
Python 微進階 Day30 - 結語
系列文
Python 微進階31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言