什麼是 Python 託管服務?

如要在網路上執行 Python 應用程式,需要專門的環境來執行程式碼、管理依附元件,並將應用程式提供給使用者。Python 託管服務就是為此而生。這類服務提供必要的伺服器基礎架構和軟體堆疊,專門用來執行以 Python 程式設計語言建構的應用程式。與一般網站代管服務不同,Python 託管服務專為滿足該語言的獨特需求而設計,例如支援特定框架、程式庫和部署標準。

Python 託管服務的主要功能

企業開發人員在評估 Python 應用程式託管服務時,應尋找具備特定功能組合的服務,確保彈性、控管能力和效能。完善的 Python 託管環境通常具備下列特點:

  • 支援多個 Python 版本:可選取應用程式所需的特定 Python 解譯器版本 (例如:3.13、3.12、3.11)
  • 支援虛擬環境:這是管理依附元件的關鍵。託管服務應允許使用 venv 或 virtualenv 等工具,為每個專案建立獨立環境
  • ASGI 和 WSGI 伺服器相容性:ASGI 通常是現代非同步應用程式的首選,這類應用程式需要高並行和即時通訊功能,而 WSGI 仍適用於較簡單的同步網頁應用程式;優質的託管服務具備安裝及設定這兩種伺服器的能力
  • 套件管理存取權:可能需要 Shell 或 SSH 存取權,才能從 Python Package Index (PyPI) 安裝套件;雖然 pip 和 requirements.txt 檔案是傳統做法,但現代 Python 專案越來越常使用 pyproject.toml 進行依附元件管理,並搭配 uv 等新工具,以更快、更有效率地解析及安裝套件
  • 資料庫支援:輕鬆整合 Python 應用程式中常用的資料庫,例如 PostgreSQL 和 MySQL
  • 擴充性:可根據應用程式的流量和處理需求變化,輕鬆擴充或縮減伺服器資源 (CPU、RAM)
  • Git 整合:支援直接從 Git 存放區部署程式碼,簡化 CI/CD 管道

Python 託管類型

Python 託管解決方案的範圍很廣,從簡單的低成本選項到強大、高度可擴充的環境都有。選擇哪種做法,取決於應用程式的複雜度、效能需求,以及開發人員對控管權的需求。

託管類型

開發人員應用實例

您嘗試解決的問題例子

共用託管

開發人員使用 Flask 等輕量級框架,建立個人網誌、簡單的作品集網站或小型專案。

「我需要一種簡單且成本極低的方式,將個人專案上線。我不需要特殊設定,流量也會很低。」

VPS (虛擬私人伺服器) 託管服務


開發人員推出內容管理系統或電子商務網站,需要特定系統套件。

「我需要安裝 Redis 等快取伺服器,並處理客戶網站的適度、可預測流量,但專用伺服器的費用太高了。」

雲端託管/PaaS (平台即服務)


企業開發人員正在建構可擴充的微服務或網路 API,且必須處理新產品推出時無法預測的流量。

「我希望應用程式規模能自動隨著使用人數增加而擴充,因為我想專心設計程式,而非管理伺服器。」

專用伺服器託管


開發團隊執行耗用大量資源的資料處理應用程式,或金融服務平台必須遵守嚴格的法規。

「我的應用程式會處理大型資料集,因此必須用到所有 CPU 和 RAM,無法與其他項目爭用。此外,我還需要完全控管硬體,以便進行安全稽核。」

託管類型

開發人員應用實例

您嘗試解決的問題例子

共用託管

開發人員使用 Flask 等輕量級框架,建立個人網誌、簡單的作品集網站或小型專案。

「我需要一種簡單且成本極低的方式,將個人專案上線。我不需要特殊設定,流量也會很低。」

VPS (虛擬私人伺服器) 託管服務


開發人員推出內容管理系統或電子商務網站,需要特定系統套件。

「我需要安裝 Redis 等快取伺服器,並處理客戶網站的適度、可預測流量,但專用伺服器的費用太高了。」

雲端託管/PaaS (平台即服務)


企業開發人員正在建構可擴充的微服務或網路 API,且必須處理新產品推出時無法預測的流量。

「我希望應用程式規模能自動隨著使用人數增加而擴充,因為我想專心設計程式,而非管理伺服器。」

專用伺服器託管


開發團隊執行耗用大量資源的資料處理應用程式,或金融服務平台必須遵守嚴格的法規。

「我的應用程式會處理大型資料集,因此必須用到所有 CPU 和 RAM,無法與其他項目爭用。此外,我還需要完全控管硬體,以便進行安全稽核。」

依託管類型區分的 Python 應用程式部署步驟

雖然基本部署步驟類似,但每種託管服務需要的人工作業和控管程度差異很大。

部署步驟

各類託管服務的注意事項

準備應用程式

通用:確保 pyproject.toml 檔案或 requirements.txt 檔案列入所有依附元件。

選擇託管服務供應商

通用做法:根據應用程式的控管、擴充性和預算需求,選擇最合適的服務。

設定環境

共用:選項有限,通常透過 cPanel 控管。

VPS/專用:您具備完整根層級存取權,但必須手動安裝 Python、venv 和系統程式庫。

雲端/PaaS:通常由平台自動處理,您可能只需在設定檔指定 Python 版本。

上傳程式碼


共用:通常透過 FTP 或網路式檔案管理工具。

VPS/專用:建議使用 Git (例如 git pull)。

雲端/PaaS:通常直接與 Git 整合以自動部署 (例如:gcloud run deploy)。

設定應用程式


共用:設定選項有限。

VPS/專用:完全控管環境變數和伺服器設定。

雲端/PaaS:透過服務設定檔 (例如 service.yaml) 或網路控制台管理。

安裝依附元件

共用:可能受到限制。

VPS/專用:透過 SSH 執行「pip install -r requirements.txt」指令。

雲端/PaaS:平台通常會在以 requirements.txt 為基礎的建構程序中,自動安裝依附元件。

執行遷移作業 (如適用)

共用:通常需要控制台的特定工具。

VPS/專用:透過 SSH 直接執行遷移指令。

Cloud/PaaS:可設定為部署後指令碼的一部分,或以個別工作形式執行。

啟動應用程式伺服器


共用:通常由主機預先設定及管理。

VPS/專用:必須手動安裝、設定及執行 WSGI 伺服器 (例如 Gunicorn)。

雲端/PaaS:平台會自動管理應用程式伺服器。

設定網域 (選用)


通用做法:將自訂網域的 DNS 記錄指向託管服務提供的 IP 位址或主機名稱。

部署步驟

各類託管服務的注意事項

準備應用程式

通用:確保 pyproject.toml 檔案或 requirements.txt 檔案列入所有依附元件。

選擇託管服務供應商

通用做法:根據應用程式的控管、擴充性和預算需求,選擇最合適的服務。

設定環境

共用:選項有限,通常透過 cPanel 控管。

VPS/專用:您具備完整根層級存取權,但必須手動安裝 Python、venv 和系統程式庫。

雲端/PaaS:通常由平台自動處理,您可能只需在設定檔指定 Python 版本。

上傳程式碼


共用:通常透過 FTP 或網路式檔案管理工具。

VPS/專用:建議使用 Git (例如 git pull)。

雲端/PaaS:通常直接與 Git 整合以自動部署 (例如:gcloud run deploy)。

設定應用程式


共用:設定選項有限。

VPS/專用:完全控管環境變數和伺服器設定。

雲端/PaaS:透過服務設定檔 (例如 service.yaml) 或網路控制台管理。

安裝依附元件

共用:可能受到限制。

VPS/專用:透過 SSH 執行「pip install -r requirements.txt」指令。

雲端/PaaS:平台通常會在以 requirements.txt 為基礎的建構程序中,自動安裝依附元件。

執行遷移作業 (如適用)

共用:通常需要控制台的特定工具。

VPS/專用:透過 SSH 直接執行遷移指令。

Cloud/PaaS:可設定為部署後指令碼的一部分,或以個別工作形式執行。

啟動應用程式伺服器


共用:通常由主機預先設定及管理。

VPS/專用:必須手動安裝、設定及執行 WSGI 伺服器 (例如 Gunicorn)。

雲端/PaaS:平台會自動管理應用程式伺服器。

設定網域 (選用)


通用做法:將自訂網域的 DNS 記錄指向託管服務提供的 IP 位址或主機名稱。

專案範例:互動式 Python 網頁表單

本節將透過兩個例子,示範使用 Python 建立互動式網頁應用程式的不同的做法和技術。

Flask 和 Gunicorn (傳統做法)

以下逐步指南將引導您使用 Flask 框架,建立簡單的互動式網頁應用程式。這個應用程式會向使用者顯示表單、處理輸入內容,並顯示自訂回覆。這是許多 Web 服務和內部工具的基本運作模式。

步驟 1:設定本機專案目錄

首先建立專案資料夾,然後前往該資料夾。為避免造成衝突,請務必建立虛擬環境來區隔專案依附元件,最佳做法就是建立專案資料夾。

mkdir python-form-app && cd python-form-app

python3 -m venv venv

source venv/bin/activate

mkdir python-form-app && cd python-form-app

python3 -m venv venv

source venv/bin/activate

步驟 2:安裝依附元件並建立應用程式檔案

安裝 Flask 程式庫做為網路框架,並安裝正式環境等級 WSGI 伺服器 Gunicorn,為應用程式提供服務。

pip install Flask gunicorn

pip install Flask gunicorn

接著建立名為 main.py 的檔案。這段程式碼會設定兩個路徑:一個用來顯示 HTML 表單 (GET 要求),另一個用來處理提交的表單 (POST 要求)。

import os

from flask import Flask, request, render_template_string

app = Flask(__name__)

# 為求簡便,請直接在程式碼中定義表單的 HTML 範本

FORM_TEMPLATE = """

<!DOCTYPE html>

<html>

<head>

    <title>Simple Form</title>

</head>

<body>

    <h1>Please enter your name</h1>

    <form action="/greet" method="post">

        <label for="name">Name:</label>

        <input type="text" id="name" name="name" required>

        <button type="submit">Submit</button>

    </form>

</body>

</html>

"""

# 這個路徑會顯示表單

@app.route("/", methods=['GET'])

def show_form():

    return render_template_string(FORM_TEMPLATE)

# 這個路徑會處理提交的表單

@app.route("/greet", methods=['POST'])

def greet_user():

    user_name = request.form['name']

    if not user_name:

        user_name = "World"

    return f"<h1>Hello, {user_name}!</h1>"

if __name__ == "__main__":

    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

import os

from flask import Flask, request, render_template_string

app = Flask(__name__)

# 為求簡便,請直接在程式碼中定義表單的 HTML 範本

FORM_TEMPLATE = """

<!DOCTYPE html>

<html>

<head>

    <title>Simple Form</title>

</head>

<body>

    <h1>Please enter your name</h1>

    <form action="/greet" method="post">

        <label for="name">Name:</label>

        <input type="text" id="name" name="name" required>

        <button type="submit">Submit</button>

    </form>

</body>

</html>

"""

# 這個路徑會顯示表單

@app.route("/", methods=['GET'])

def show_form():

    return render_template_string(FORM_TEMPLATE)

# 這個路徑會處理提交的表單

@app.route("/greet", methods=['POST'])

def greet_user():

    user_name = request.form['name']

    if not user_name:

        user_name = "World"

    return f"<h1>Hello, {user_name}!</h1>"

if __name__ == "__main__":

    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

步驟 3:建立依附元件檔案

建立 requirements.txt 檔案來列出專案的依附元件。這個檔案會指示伺服器該安裝哪些套件,因此無論要部署的託管環境為何,這個檔案都相當重要。

pip freeze > requirements.txt

pip freeze > requirements.txt

步驟 4:在 localhost Python 伺服器上測試應用程式

在本機執行應用程式,確認表單正常顯示且提交邏輯正常運作。

python main.py

python main.py

現在開啟網路瀏覽器,前往 http://localhost:8080。您應該會看到一個簡單網頁,其中顯示要求您輸入名稱的表單。輸入您的名稱,然後點選「提交」按鈕。網頁會重新整理並顯示個人化問候,確認應用程式正常運作。

步驟 5:準備正式版

部署至正式環境時,請務必使用穩固的 WSGI 伺服器 (例如 Gunicorn),而非 Flask 的內建開發伺服器。您可以使用下列指令,在本機測試這項互動:

gunicorn --bind 0.0.0.0:8080 main:app

gunicorn --bind 0.0.0.0:8080 main:app

這個互動式應用程式已正確建構完成並通過驗證,可以部署至專業供應商的 Python 伺服器託管服務。

FastAPI 和 Uvicorn (現代非同步做法)

以下將舉例示範如何使用 FastAPI 建構相同的互動式網路表單。FastAPI 是一項快速 (高效能) 的新型框架,可根據標準 Python 類型提示,使用 Python 3.7 以上版本建構 API。同時,本例將使用 Uvicorn 做為 ASGI 伺服器。這種做法非常適合需要高並行處理量的非同步應用程式。

步驟 1:設定本機專案目錄並安裝依附元件

首先,建立專案目錄並設定虛擬環境。我們在這裡採用一項新工具 uv。與傳統工具相比,uv 可省略許多步驟,而且速度快 100 倍:

mkdir fastapi-form-app && cd fastapi-form-app

uv venv .venv

source .venv/bin/activate #for linux or mac

.venv\Scripts\activate #for windows

mkdir fastapi-form-app && cd fastapi-form-app

uv venv .venv

source .venv/bin/activate #for linux or mac

.venv\Scripts\activate #for windows

只需一個步驟即可安裝程式庫:

uv pip install fastapi uvicorn Jinja2

uv pip install fastapi uvicorn Jinja2

步驟 2:建立應用程式檔案

建立名為 main.py 的檔案,並在其中加入下列內容:

from fastapi import FastAPI, Form, Request

from fastapi.responses import HTMLResponse

from fastapi.templating import Jinja2Templates

import os

app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)

async def show_form(request: Request):

    return templates.TemplateResponse("form.html", {"request": request})

@app.post("/greet", response_class=HTMLResponse)

async def greet_user(request: Request, name: str = Form(...)):

    if not name:

        name = "World"

    return templates.TemplateResponse("greeting.html", {"request": request, "name": name})

from fastapi import FastAPI, Form, Request

from fastapi.responses import HTMLResponse

from fastapi.templating import Jinja2Templates

import os

app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)

async def show_form(request: Request):

    return templates.TemplateResponse("form.html", {"request": request})

@app.post("/greet", response_class=HTMLResponse)

async def greet_user(request: Request, name: str = Form(...)):

    if not name:

        name = "World"

    return templates.TemplateResponse("greeting.html", {"request": request, "name": name})

步驟 3:建立 HTML 範本

建立名為 templates 的目錄,並加入下列檔案:

templates/form.html:

<!DOCTYPE html>

<html>

<head>

    <title>Simple Form</title>

</head>

<body>

    <h1>Please enter your name</h1>

    <form action="/greet" method="post">

        <label for="name">Name:</label>

        <input type="text" id="name" name="name" required>

        <button type="submit">Submit</button>

    </form>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

    <title>Simple Form</title>

</head>

<body>

    <h1>Please enter your name</h1>

    <form action="/greet" method="post">

        <label for="name">Name:</label>

        <input type="text" id="name" name="name" required>

        <button type="submit">Submit</button>

    </form>

</body>

</html>

templates/greeting.html:

<!DOCTYPE html>

<html>

<head>

    <title>Greeting</title>

</head>

<body>

    <h1>Hello, {{ name }}!</h1>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

    <title>Greeting</title>

</head>

<body>

    <h1>Hello, {{ name }}!</h1>

</body>

</html>

步驟 4:在本機測試應用程式

使用 Uvicorn 執行應用程式:

uvicorn main:app --reload

uvicorn main:app --reload

開啟網路瀏覽器並前往 http://localhost:8000。您應該會看到一份表單。輸入名稱並提交後,系統就會顯示個人化問候。--reload 旗標可在程式碼變更時自動重新載入應用程式,加快測試程序。

步驟 5:準備正式版

部署時,請確認 pyproject.toml 檔案已指定依附元件。您可以使用 uv 等工具進一步簡化這個流程,不過基本範例如下:

[project]

name = "fastapi-form-app"

version = "0.1.0"

description = "Simple FastAPI form app"

dependencies = [

    "fastapi",

    "uvicorn",

    "Jinja2"

]

[project]

name = "fastapi-form-app"

version = "0.1.0"

description = "Simple FastAPI form app"

dependencies = [

    "fastapi",

    "uvicorn",

    "Jinja2"

]

接著只要指向環境,即可輕鬆部署。

常見問題

Python 託管服務常見問題。

一般網站託管服務主要針對靜態檔案 (HTML、CSS) 和以 PHP 為基礎的系統 (如 WordPress) 進行最佳化;Python 託管服務則經過專門設定,主要支援 Python 執行階段和相關生態系統。這包括提供不同 Python 版本、WSGI 應用程式伺服器 (例如 Gunicorn) 支援服務,以及透過 pip 和 requirements.txt 管理 Python 套件的工具。一般託管服務可能未安裝或未提供這些重要元件。

SSH (安全殼層) 存取權是多種 Python 託管服務的必要元素,尤其是 VPS 和專屬伺服器。這項存取權能讓您登入伺服器指令列來安裝套件、遷移資料庫、設定 WSGI 伺服器,以及直接管理應用程式檔案。雖然部分代管平台即服務 (PaaS) 解決方案會將這類作業抽象化,但有了 SSH 存取權,就能獲得最高層級的控管能力和彈性。

是,雖然 Python 託管服務通常用於網頁應用程式,但這個環境同樣能用來執行其他類型的 Python 指令碼。舉例來說,您可以使用 VPS 或 Compute Engine VM 長時間執行背景 worker 來處理資料、使用 cron 執行排定的工作,或執行機器學習模型推論伺服器。重點在於具備可安裝 Python 和相關依附元件的伺服器環境。

WSGI (網路伺服器閘道介面) 伺服器,是正式託館 Python 網站的重要元素。這類伺服器包括 Gunicorn、uWSGI 等。相較之下,Flask 和 Django 等框架預先安裝的開發伺服器不適合處理正式環境流量。WSGI 伺服器可做為中介服務,從穩固的前端網路伺服器 (例如 NGINX) 接收 HTTP 要求,然後轉換為 Python 應用程式框架可理解的標準化格式。這類伺服器不僅能管理多個工作站程序,還能在負載狀態下維持高效能和穩定性。

在 localhost 執行 Python 應用程式,是指在自己的電腦上測試 Python 應用程式。要確保程式碼在受控環境中正常運作,這是關鍵的第一步。正式託管 Python,則是指將正常運作的應用程式部署到連上網際網路的伺服器,讓全球使用者存取。良好的部署程序應盡可能讓正式環境與 localhost 測試環境相似,以避免發生意外。容器化等技術的主要好處就是能做到這點。

Python 託管服務的優點

效能最佳化

專為 Python 設置的託管環境,透過適當的伺服器設定和 WSGI 等技術,提供更優異的效能。

簡化依附元件管理作業

支援虛擬環境和 pip,可輕鬆管理專案依附元件,避免造成衝突。

擴充性高,可支援應用程式成長

優質的 Python 託管服務,特別適合用來將 Python 應用程式託管於雲端,可提供明確的途徑,讓您隨著使用者人數和流量增加,調度應用程式資源。

提升開發人員效率

Python 託管服務提供立即可用的環境並內建合適工具,讓開發人員能減少管理伺服器的時間,專心建構應用程式功能。

支援多種架構

許多託管平台與龐大 Python 網路架構生態系統相容,包括 Django、Flask、FastAPI。

透過 Google Cloud 解決業務難題

新客戶可以獲得價值 $300 美元的免費抵免額,盡情試用各項 Google Cloud 功能。

Python 託管服務的安全考量

  • 依附元件管理:應定期稽核並更新 requirements.txt 所列的依附元件,修補已知安全漏洞。請使用工具來掃描套件的安全性問題。
  • 密鑰管理:切勿透過硬式編碼,將 API 金鑰、資料庫憑證或其他密鑰直接寫入原始碼。請使用環境變數或專屬密鑰管理服務。
  • 停用偵錯模式:應確保正式環境的網路架構已關閉偵錯模式,因為偵錯模式可能會曝露有關應用程式設定的機密資訊。
  • 使用虛擬環境:務必一律使用虛擬環境,來區隔應用程式的依附元件。這麼做可避免造成全域套件衝突,並提供更乾淨安全的環境。
  • 網路伺服器設定:以安全的方式設定網路伺服器和 WSGI 伺服器。限制權限,確保只對網際網路公開必要的通訊埠。
您希望解決什麼問題?
What you'll get:
逐步指南
參考架構
可用的預先建構解決方案
這項服務以 Vertex AI 建構,必須年滿 18 歲才能使用。請勿輸入個人資訊,或是敏感、機密的內容。

瞭解詳情

瞭解如何搭配使用 Python 與 Cloud Run,部署可擴充的容器化應用程式。

展開下一步行動

運用價值 $300 美元的免費抵免額和超過 20 項一律免費的產品,開始在 Google Cloud 中建構產品與服務。