當標準的PyODPS功能無法滿足複雜的業務需求時,開發人員需要複用已有的Python代碼邏輯,或利用開源庫來完成任務。為此,DataWorks 提供兩種核心方案:通過資源引用靈活載入自訂指令碼,或通過配置執行環境(如自訂鏡像、營運助手)來整合功能強大的第三方包。本文介紹如何在DataWorks的PyODPS節點中調用自訂Python指令碼或安裝並使用開源第三方包,以擴充資料處理能力。
情境快速選擇
根據您的環境和需求,選擇對應的操作路徑:
情境 | 資源群組類型 | 方案 |
依賴開源三方包 | Serverless資源群組 | |
獨享調度資源群組 | ||
僅依賴自訂的 | Serverless資源群組/獨享調度資源群組 |
不同方案的主要流程如下圖所示:
準備工作
在開始之前,請確保您理解以下兩個關鍵概念,以決定您的配置方式。
概念說明
節點類型:PyODPS 2 VS PyODPS 3
PyODPS 2:基於 Python 2.7 環境。
PyODPS 3:基於 Python 3.7+ 環境。
建議:強烈推薦使用 PyODPS 3,因為Python 2已停止官方維護。本文主線教程將以PyODPS 3為例。
資源群組類型:Serverless資源群組 VS 獨享調度資源群組
資源群組類型判斷
您可以在DataWorks控制台工作空間詳情的資源群組頁面,查看您工作空間綁定的資源群組類型。
如果為通用型,則表示使用的Serverless資源群組。
如果為資料調度,則表示使用的獨享調度資源群組。
通過自訂鏡像安裝開源包
此方法適用於Serverless資源群組。
本節將引導您完成一個完整的端到端案例:建立一個包含pendulum包的自訂環境,並在PyODPS 3節點中調用它來擷取並格式化特定時區的目前時間。
步驟一:建立包含 pendulum 的自訂鏡像
自訂鏡像是為Serverless資源群組準備運行環境的方式。
登入DataWorks控制台,單擊左側導覽列上的鏡像管理進入鏡像管理頁面。
切換至自訂鏡像頁簽,進入自訂鏡像列表頁。
單擊左上方的建立鏡像按鈕,在建立頁面,配置以下關鍵參數:
參數
說明
鏡像名稱
自訂鏡像的名稱,例如
pyodps3_with_pendulum。參考型別
選擇DataWorks官方鏡像。
鏡像名稱/ID
下拉選擇DataWorks提供的官方鏡像dataworks_pyodps_task_pod。
支援任務類型
選擇PyODPS 3任務類型。
安裝包
選擇Python3,下拉選擇系統提供的pendulum包。
若需安裝非內建開源包,可通過Script模式手動安裝。更多配置方式,可參見建立自訂鏡像參數。
重要若從公網安裝開源包時,Serverless資源群組綁定的VPC需具備公網訪問能力。
單擊確認,完成自訂鏡像建立。
在自訂鏡像列表頁,對目標鏡像進行測試並發布。僅當測試通過之後,方可發布。
在目標鏡像操作列單擊,為自訂鏡像綁定歸屬工作空間。

步驟二:建立並配置PyODPS 3節點
單擊左側導覽列的,在下拉框中選擇目標工作空間後單擊進入資料開發。
在已有的商務程序下建立一個新的PyODPS 3節點,例如命名為
pyodps3_pendulum_test。在
pyodps_pendulum_test節點的代碼編輯器中,編寫Python 3代碼:# 因為pendulum已在自訂鏡像中安裝,所以可以直接匯入。Python3文法 import pendulum print("開始測試第三方包 pendulum...") try: # 使用pendulum擷取“亞洲/上海”時區的目前時間 shanghai_time = pendulum.now('Asia/Shanghai') # 列印格式化後的時間和時區資訊 print(f"成功匯入 'pendulum' 包。") print(f"當前上海時間是: {shanghai_time.to_datetime_string()}") print(f"對應的時區是: {shanghai_time.timezone_name}") print("\n測試通過!PyODPS節點成功調用了第三方包。") except Exception as e: print(f"測試失敗,發生錯誤: {e}")
步驟三:測試回合驗證結果
單擊工具列
表徵圖運行代碼,在參數彈窗中選擇您所建立的鏡像pyodps3_with_pendulum。重要若找不到目標鏡像,請將鏡像綁定至當前工作空間。具體操作請參見步驟一的第6小步。
查看下方的作業記錄,您將看到類似以下的輸出,證明
pendulum包已成功被調用。開始測試第三方包 pendulum... 成功匯入 'pendulum' 包。 當前上海時間是: 2025-09-27 15:45:00 對應的時區是: Asia/Shanghai 測試通過!PyODPS節點成功調用了第三方包。
步驟四:發布PyODPS 3節點
完成測試後,需在節點編輯頁面右側的,選擇準備的Serverless資源群組並修改鏡像為建立的鏡像pyodps3_with_pendulum。後續按正常流程發布節點至營運中心即可。
使用營運助手安裝開源包
此方法適用於舊版獨享調度資源群組,該類型資源群組已不再推薦。建議您遷移至功能更強大、更靈活的Serverless資源群組。
登入DataWorks工作空間列表,在頂部切換地區,然後找到目標工作空間,單擊操作列的詳情,進入工作空間詳情頁。
在左側導覽列單擊資源群組,找到已綁定的獨享調度資源群組,單擊操作列的。
在營運助手頁面,單擊左上方的建立命令。
根據您的Python版本輸入相應命令:
Python 3 (PyODPS 3):保持其他預設選項,下拉選擇Python3包類型下pendulum安裝包。
Python 2 (PyODPS 2):選擇手動輸入模式,輸入命令內容。
pip install --upgrade pip pip install "pendulum<2.0"
在營運助手頁面,單擊操作欄的運行命令。執行成功後,您便可以在對應的PyODPS節點中直接
import pendulum使用。
引用自訂 Python 資源
如果您只是想調用自己寫的另一個 .py 檔案中的函數,操作如下:
建立Python資源:
在資料開發頁面,按右鍵目標商務程序,選擇。
在建立資源對話方塊中,填寫資源名稱(樣本名:
my_utils.py),單擊建立。在Python資源中輸入如下代碼。
# my_utils.py Python3文法 def say_hello(name): print(f"Hello, {name}! This is from my_utils module.")儲存並提交該資源。
建立PyODPS 3節點並引用資源:
在目標商務程序,按右鍵MaxCompute,選擇,按介面完成節點建立。
在節點中通過
##@resource_reference{"my_utils.py"}引用上述資源,代碼如下:##@resource_reference{"my_utils.py"} import sys import os #將資源所在的目前的目錄添加到Python解譯器的搜尋路徑中 sys.path.append(os.path.dirname(os.path.abspath('my_utils.py'))) #現在可以像普通模組一樣匯入和使用了 import my_utils my_utils.say_hello("DataWorks")
運行節點,您將在日誌中看到 "Hello, DataWorks! This is from my_utils module." 的輸出。
常見問題
Q:通過命令手動安裝包時,自訂鏡像測試很久沒進度。
如果任務啟動並執行環境需要依賴位於公網的第三方包,則Serverless資源群組綁定的VPC需要具備公網訪問能力。具體操作請參見為資源群組開通公網。
可切換嘗試不同Python包來源,例如https://mirrors.aliyun.com/pypi/simple/。阿里雲鏡像不需要公網訪問。
Q:如果匯入第三方包失敗,請按以下步驟排查。
確認自訂鏡像是否已發布成功。
確認鏡像支援的任務類型(PyODPS 2/3)與您建立的節點類型匹配。
確認PyODPS節點的調度配置中,是否正確選擇該自訂鏡像。
資源群組不可選擇公用資源群組。
檢查安裝的包版本是否與您的Python版本相容(例如
pendulum2.0+ 不支援Python 2)。
> 修改歸屬工作空間
> 營運助手