Python學習筆記
2022/08/28
安裝
# 安裝python3
sudo apt-get install python3 -y
# 安裝pip
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python3-pip -y
# 確認安裝版本
python --version
pip --version
# 若上述方式裝起來是3.8, 可使用以下方式裝3.9
sudo apt-get install python3.9 -y
sudo ln -sf /usr/bin/python3.9 /usr/bin/python3
python --version
sudo apt-get install python3.9-venv -y
相依性
pip為python套件管理工具
類似於js的npm或php的composer
列出系統所有安裝的python套件(包含自帶套件例如pip)
pip list
列出系統所有安裝的python套件(不包含自帶套件)
pip freeze
requirements.txt
通常都會使用requirements.txt檔案來紀錄安裝的套件及版本
因此可直接使用以下指令將套件安裝資訊dump至requirements.txt檔案中
pip freeze > requirements.txt
亦可透過requirements.txt來安裝該檔案內的所有套件及版本
pip install -r requirements.txt
venv虛擬環境
# pip安裝virtualenv
pip install virtualenv
# 建立虛擬環境目錄
virtualenv venv
# 啟動虛擬環境
source venv/bin/activate
# 啟動虛擬環境(fish shell)
. venv/bin/activate.fish
# 在venv中使用最新的pip
pip install --upgrade pip
# 在虛擬環境中使用pip安裝套件
venv/bin/pip install [package-name]
ENV
pip install python-dotenv
建立一個.env檔案
DB_HOST=localhost
DB_USERNAME=username
DB_PASSWORD=password
DB_DATABASE_NAME=db
使用dotenv_values來取得環境變數
import pymysql.cursors
from dotenv import dotenv_values
config = dotenv_values(".env")
# Connect to the database
connection = pymysql.connect(host=config['DB_HOST'],
user=config['DB_USERNAME'],
password=config['DB_PASSWORD'],
database=config['DB_DATABASE_NAME'],
cursorclass=pymysql.cursors.DictCursor)
或是直接使用load_dotenv將.env檔案載入為環境變數
import os
from dotenv import load_dotenv
load_dotenv()
print(f"GOOGLE_APPLICATION_CREDENTIALS = {os.getenv('GOOGLE_APPLICATION_CREDENTIALS')}")
MySQL
import pymysql.cursors
from dotenv import dotenv_values
config = dotenv_values(".env")
# Connect to the database
connection = pymysql.connect(host=config['DB_HOST'],
user=config['DB_USERNAME'],
password=config['DB_PASSWORD'],
database=config['DB_DATABASE_NAME'],
cursorclass=pymysql.cursors.DictCursor)
with connection:
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `name` FROM `site_admin`"
cursor.execute(sql, ())
result = cursor.fetchall()
print(result)
Flask
安裝
參考文件: https://flask.palletsprojects.com/en/2.2.x/installation/
sudo apt install python3.8-venv -y
python3 -m venv venv
app.py(主要程式碼)
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
啟動虛擬環境
. venv/bin/activate
啟動開發環境
# 啟動app.py
flask --app app.py run
# 啟動app.py並啟用debugger
flask --app app.py --debug run
Flask容器化
安裝gunicorn
pip install gunicorn
Dockerfile
FROM python:3.8-slim
ENV APP_HOME /path-to-your-service
WORKDIR $APP_HOME
COPY . /$APP_HOME
# Install production dependencies.
RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT ["sh", "docker/entrypoint.sh"]
docker/entrypoint
假設flask main.py路徑為/path-to-your-service/app/main.py
並在main.py中使用app = Flask(__name__)指定flask instance為app
則gunicorn執行指令的argument為app.main:app (目錄用"."做區隔, 最後用":"接上flask instance name)
#!/bin/sh
echo "Start Server"
exec gunicorn \
--bind :8080 \
--workers 1 \
--threads 8 \
--pythonpath /path-to-your-service \
--timeout 0 \
app.main:app
String Formatting
Old School
name = 'ciao'
age = 30
return "name: %s, age: %s" % (name, age)
Python3新用法
# 一般用法(f)
name = 'ciao'
age = 30
print(f"name: {name}, age: {age}")
# 一般用法(F)
name = 'ciao'
age = 30
print(F"name: {name}, age: {age}")
# 多行
name = 'ciao'
age = 30
message = f"""
name: {name}
age: {age}.
"""
print(message)
其他字串處理
# string repeat
a = '*'*5
print(a)
# output: *****
# template string
b = f"1 + 2 + 3 = {1+2+3}"
print(b)
# output: 1 + 2 + 3 = 6