
n8n 的 Code 節點是解鎖自動化流程無限潛能的瑞士刀,它預設使用 JavaScript,讓你能用程式碼處理各種複雜的客製化邏輯。但如果你或你的團隊是 Python 的忠實擁護者呢?當你面對複雜的數據分析、資料清洗,或是想利用 Pandas、Requests 這類強大的 Python 函式庫時,難道只能望著 Code 節點興嘆,改用自己不熟悉的 JavaScript 嗎?
答案是:不用!n8n 其實隱藏著執行 Python 程式碼的強大功能!
是的,你沒看錯。雖然不是開箱即用的預設選項,但只要透過一個簡單的環境設定,你就能在 n8n 的 Code 節點中,從 JavaScript 切換到 Python,讓你用最熟悉的語言,在自動化工作流中大展拳腳。
這篇文章將是市面上最完整的 n8n Code 節點 Python 教學。我們將從最關鍵的環境設定開始,一步步帶你啟用 Python 執行模式,並詳細解釋 Python 環境下的資料傳遞邏輯,最後提供多個實戰程式碼範例,讓你真正釋放 n8n 結合 Python 的數據處理超能力。
關鍵第一步:如何為 n8n 啟用 Python 執行環境?
如果你直接在 n8n 的 Code 節點尋找,你會發現根本沒有切換語言的選項。這是因為 n8n 預設只會啟動它主要的核心執行緒,而這個執行緒是基於 Node.js 的,也就是 JavaScript。為了安全與穩定性,要執行其他語言,需要手動啟用一個獨立的執行模式。
認識 n8n 的執行模式
n8n 提供了不同的執行模式來處理工作流。簡單來說:
main
模式: 這是 n8n 的主要核心程序,專門用來執行 JavaScript。isolated
模式: 這是一個隔離的、獨立的程序,n8n 可以用它來安全地執行非 JavaScript 的程式碼,例如 Python。
我們的目標,就是告訴 n8n:「嘿,請幫我把 isolated
這個隔離的執行程序也準備好!」
設定環境變數:EXECUTIONS_PROCESS=main
啟用 Python 的魔法咒語,就是設定一個名為 EXECUTIONS_PROCESS
的環境變數。你需要在啟動 n8n 服務時,將這個變數的值設定為 main
。
這看起來可能有點違反直覺,但它的意思是:「請將主要的執行模式設定為 main
,並且也順便把隔離模式(isolated
)給我準備好,以便我之後可以選用。」
Docker / Docker Compose 使用者設定教學
對於大多數使用 Docker 或 Docker Compose 來部署 n8n 的使用者,設定方法非常簡單。你只需要在你的設定檔中加入這個環境變數即可。
使用 docker-compose.yml
的設定範例:
在你的 docker-compose.yml
檔案中,找到 n8n
服務的 environment
區塊,在底下新增一行:
YAML
version: '3.7'
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
# --- 在這裡加上底下這一行 ---
- EXECUTIONS_PROCESS=main
# --- 其他你的環境變數 ... ---
- GENERIC_TIMEZONE=Asia/Taipei
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
使用 docker run
指令的設定範例:
如果你是直接使用 docker run
指令啟動,則在指令中加入 -e EXECUTIONS_PROCESS=main
參數:
Bash
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-e EXECUTIONS_PROCESS=main \
n8nio/n8n
設定完成後,記得重新啟動你的 n8n 容器 (docker-compose up -d --force-recreate
或重新執行 docker run
)。
驗證設定:在 Code 節點看見語言選項
成功重啟後,回到你的 n8n 工作流,新增一個 Code 節點。點開它的設定面板,你會驚喜地發現,在最上方多出了一個「Language」的下拉選單!點開它,你就能看到「Python」這個選項。
選取 Python 之後,底下的程式碼編輯區就會切換成 Python 的語法環境。恭喜你,你已經成功解鎖了 n8n 的 Python 模式!
n8n Python Code 節點:資料輸入與輸出邏輯
在 Python 環境中,資料的傳遞方式與 JavaScript 略有不同,但概念是相通的。
讀取輸入資料:Python 中的 items
在 Python 模式下,所有從上一個節點傳入的資料,同樣會被打包成一個名為 items
的變數。不過,它的結構是一個包含單一元素的 List,這個元素才包含了我們需要的資料。
items
: 一個 Python List,通常你只需要處理第一個元素items[0]
。items[0].json
: 這是一個 Dictionary,裡面存放了你真正需要的資料,也就是上一個節點輸出的 JSON 內容。
回傳輸出資料:Python 的 return
語法
與 JavaScript 模式一樣,Python 模式的 Code 節點也必須回傳一個 n8n 能看得懂的資料結構,否則工作流會中斷。這個結構是一個 List of Dictionaries,格式如下: [{'json': { ... }}]
基礎程式碼結構
這是一個在 Python Code 節點中最基本的樣板,你可以直接複製使用:
Python
# 取得從上一個節點傳來的第一筆資料
input_item = items[0]
# 準備一個新的 list 來存放處理完的結果
output_items = []
# --- 你的主要 Python 邏輯寫在這裡 ---
# 範例:複製一份原始資料,避免直接修改
# 這樣做是個好習慣
processed_data = input_item.json.copy()
# 在資料中新增一個欄位
processed_data['message'] = 'This was processed by Python!'
# 將處理完的資料包裝成 n8n 的 item 格式,並加入到輸出的 list 中
output_items.append({'json': processed_data})
# ------------------------------------
# 最後,回傳這個 list
return output_items

實戰範例一:使用 Python 進行數據清洗與計算
目標: 假設有一批客戶資料,phone
欄位格式混亂(可能包含 +886-
、0
、-
等)。我們要用 Python 清理電話號碼,只保留數字,並計算客戶姓名 name
的長度。
輸入資料範例: [{'json': {'name': '陳小明', 'phone': '0912-345-678'}}]
Python Code 節點程式碼:
Python
import re # 匯入 Python 的正規表示式模組
items_in = items[0]
output_items = []
# 複製一份資料來處理
data = items_in.json.copy()
# 1. 清洗電話號碼
original_phone = data.get('phone', '') # 使用 .get() 避免欄位不存在時出錯
# 使用正規表示式,只保留數字
cleaned_phone = re.sub(r'\D', '', original_phone)
data['cleaned_phone'] = cleaned_phone
# 2. 計算姓名長度
name = data.get('name', '')
name_length = len(name)
data['name_length'] = name_length
output_items.append({'json': data})
return output_items
實戰範例二:利用 Pandas 進行簡單的數據分析
這絕對是 Python 使用者最期待的功能!n8n 的 Python 環境預先安裝了一些常用的函式庫,其中就包括數據分析神器 Pandas。
目標: 接收多筆銷售數據(多個 Items),使用 Pandas DataFrame 計算總銷售額和平均單價,並回傳一筆彙總結果。
輸入資料範例 (來自上游節點的多個 Items): [{'json': {'product': 'A', 'amount': 1500}}, {'json': {'product': 'B', 'amount': 2500}}, {'json': {'product': 'C', 'amount': 800}}]
Python Code 節點程式碼:
Python
import pandas as pd
# 由於上游節點可能傳來多個 Items,我們需要將它們全部轉換
# items 變數本身就是一個 List of Items
all_data = [item['json'] for item in items]
# 將資料轉換成 Pandas DataFrame
df = pd.DataFrame(all_data)
# 進行數據分析
total_sales = df['amount'].sum()
average_price = df['amount'].mean()
transaction_count = len(df)
# 建立一個新的 dictionary 來存放我們的分析結果
summary = {
'total_sales': int(total_sales), # 轉換成 Python 原生 int
'average_price': float(average_price), # 轉換成 float
'transaction_count': transaction_count
}
# n8n Code 節點期望回傳一個 List,所以我們將結果包裝起來
return [{'json': summary}]
Python vs. JavaScript:我該在 Code 節點用哪個?
既然兩個都能用,該如何選擇?你可以根據以下幾點來判斷:
選擇 Python 的理由:
- 團隊熟悉度: 如果你的團隊或你自己是 Python 技術棧,那麼用 Python 能夠大幅降低學習成本,提升開發效率。
- 數據科學函式庫: 當你需要使用 Pandas、NumPy 進行複雜的數據處理、分析,或是未來可能需要串接機器學習模型時,Python 是不二之選。
- 豐富的生態系: Python 在網路爬蟲 (Requests, BeautifulSoup)、API 串接等方面有著非常成熟且豐富的函式庫生態。
選擇 JavaScript 的理由:
- 開箱即用: 不需要任何額外環境設定,是 n8n 的預設語言,隨開即用。
- 執行效能: 因為是在 n8n 的
main
主程序中執行,通常 JavaScript 的執行速度會比透過isolated
程序執行的 Python 來得快一些,適合處理需要快速反應的輕量級任務。 - 語法一致性: 與 n8n 內建的 Expressions 語法(同樣基於 JavaScript)更為接近,學習曲線更平滑。

結語
啟用 Python 功能,就像是為你的 n8n 工作流裝上了一顆來自不同宇宙的強大引擎。它為習慣 Python 的開發者與數據分析師們,打開了一扇通往更深層次自動化的大門,尤其是在處理複雜數據方面,Python 的優勢無可取代。
請記住,解鎖這項功能的關鍵,就是在啟動 n8n 時設定好 EXECUTIONS_PROCESS=main
這個環境變數。一旦設定完成,你就可以將你所有的 Python 技能無縫對接到 n8n 的視覺化流程中。現在,就動手去設定,然後試著用你最熟悉的 Python 語法,開始打造真正屬於你的、無所不能的自動化工作流吧!
延伸閱讀
n8n IF 節點教學:掌握 True/False 條件判斷,打造更智慧的自動化工作流
n8n Switch 節點教學:告別複雜 IF 巢狀結構,優雅實現多重條件判斷
n8n Merge 節點教學:合併多個資料來源,告別手動複製貼上
n8n Code 節點終極教學:釋放 JavaScript 的力量,打造無極限自動化
n8n Code 節點 Python 教學:啟用並執行 Python 程式碼,釋放數據處理超能力
n8n Wait 節點教學:讓工作流學會「等待」,完美解決 API 限制與定時任務
n8n Set 節點教學:你的資料瑞士刀,新增、修改、篩選欄位一次搞定
n8n NoOp 節點教學:一個「什麼都不做」的節點,為何是整理工作流的神器?