全部產品
Search
文件中心

DataWorks:在PyODPS節點中調用第三方包

更新時間:Sep 27, 2025

當標準的PyODPS功能無法滿足複雜的業務需求時,開發人員需要複用已有的Python代碼邏輯,或利用開源庫來完成任務。為此,DataWorks 提供兩種核心方案:通過資源引用靈活載入自訂指令碼,或通過配置執行環境(如自訂鏡像、營運助手)來整合功能強大的第三方包。本文介紹如何在DataWorks的PyODPS節點中調用自訂Python指令碼或安裝並使用開源第三方包,以擴充資料處理能力。

情境快速選擇

根據您的環境和需求,選擇對應的操作路徑:

情境

資源群組類型

方案

依賴開源三方包

Serverless資源群組

通過自訂鏡像安裝開源包

獨享調度資源群組

使用營運助手安裝開源包

僅依賴自訂的.py指令檔

Serverless資源群組/獨享調度資源群組

引用自訂 Python 資源

不同方案的主要流程如下圖所示:

準備工作

在開始之前,請確保您理解以下兩個關鍵概念,以決定您的配置方式。

概念說明

  1. 節點類型:PyODPS 2 VS PyODPS 3

    • PyODPS 2:基於 Python 2.7 環境。

    • PyODPS 3:基於 Python 3.7+ 環境。

    • 建議強烈推薦使用 PyODPS 3,因為Python 2已停止官方維護。本文主線教程將以PyODPS 3為例。

  2. 資源群組類型:Serverless資源群組 VS 獨享調度資源群組

    • Serverless資源群組推薦使用。彈性、免營運,通過自訂鏡像來管理第三方依賴,功能強大且靈活。

    • 獨享調度資源群組:舊版方案,不再推薦。需預先購買並維護ECS伺服器,資源無法Auto Scaling,且通過營運助手安裝依賴限制較多,可能存在環境汙染風險。

資源群組類型判斷

您可以在DataWorks控制台工作空間詳情資源群組頁面,查看您工作空間綁定的資源群組類型。

  • 如果為通用型,則表示使用的Serverless資源群組。

  • 如果為資料調度,則表示使用的獨享調度資源群組。

通過自訂鏡像安裝開源包

重要

此方法適用於Serverless資源群組。

本節將引導您完成一個完整的端到端案例:建立一個包含pendulum包的自訂環境,並在PyODPS 3節點中調用它來擷取並格式化特定時區的目前時間。

步驟一:建立包含 pendulum 的自訂鏡像

自訂鏡像是為Serverless資源群組準備運行環境的方式。

  1. 登入DataWorks控制台,單擊左側導覽列上的鏡像管理進入鏡像管理頁面。

  2. 切換至自訂鏡像頁簽,進入自訂鏡像列表頁。

  3. 單擊左上方的建立鏡像按鈕,在建立頁面,配置以下關鍵參數:

    參數

    說明

    鏡像名稱

    自訂鏡像的名稱,例如pyodps3_with_pendulum

    參考型別

    選擇DataWorks官方鏡像

    鏡像名稱/ID

    下拉選擇DataWorks提供的官方鏡像dataworks_pyodps_task_pod

    支援任務類型

    選擇PyODPS 3任務類型。

    安裝包

    選擇Python3,下拉選擇系統提供的pendulum包。

    若需安裝非內建開源包,可通過Script模式手動安裝。更多配置方式,可參見建立自訂鏡像參數
    重要

    若從公網安裝開源包時,Serverless資源群組綁定的VPC需具備公網訪問能力

  4. 單擊確認,完成自訂鏡像建立。

  5. 自訂鏡像列表頁,對目標鏡像進行測試發布。僅當測試通過之後,方可發布。

  6. 在目標鏡像操作列單擊image > 修改歸屬工作空間,為自訂鏡像綁定歸屬工作空間。

    image

步驟二:建立並配置PyODPS 3節點

  1. 單擊左側導覽列的資料開發與營運 > 資料開發,在下拉框中選擇目標工作空間後單擊進入資料開發

  2. 在已有的商務程序下建立一個新的PyODPS 3節點,例如命名為 pyodps3_pendulum_test

  3. 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}")

步驟三:測試回合驗證結果

  1. 單擊工具列**表徵圖運行代碼,在參數彈窗中選擇您所建立的鏡像pyodps3_with_pendulum

    重要

    若找不到目標鏡像,請將鏡像綁定至當前工作空間。具體操作請參見步驟一的第6小步。

  2. 查看下方的作業記錄,您將看到類似以下的輸出,證明pendulum包已成功被調用。

    開始測試第三方包 pendulum...
    成功匯入 'pendulum' 包。
    當前上海時間是: 2025-09-27 15:45:00
    對應的時區是: Asia/Shanghai
    測試通過!PyODPS節點成功調用了第三方包。

步驟四:發布PyODPS 3節點

完成測試後,需在節點編輯頁面右側的調度配置 > 資源屬性,選擇準備的Serverless資源群組並修改鏡像為建立的鏡像pyodps3_with_pendulum。後續按正常流程發布節點至營運中心即可。

使用營運助手安裝開源包

重要

此方法適用於舊版獨享調度資源群組,該類型資源群組已不再推薦。建議您遷移至功能更強大、更靈活的Serverless資源群組。

  1. 登入DataWorks工作空間列表,在頂部切換地區,然後找到目標工作空間,單擊操作列的詳情,進入工作空間詳情頁。

  2. 在左側導覽列單擊資源群組,找到已綁定的獨享調度資源群組,單擊操作列的image > 營運助手

  3. 營運助手頁面,單擊左上方的建立命令

  4. 根據您的Python版本輸入相應命令:

    • Python 3 (PyODPS 3):保持其他預設選項,下拉選擇Python3包類型下pendulum安裝包。

    • Python 2 (PyODPS 2):選擇手動輸入模式,輸入命令內容。

      pip install --upgrade pip
      pip install "pendulum<2.0"
  5. 營運助手頁面,單擊操作欄的運行命令。執行成功後,您便可以在對應的PyODPS節點中直接 import pendulum 使用。

引用自訂 Python 資源

如果您只是想調用自己寫的另一個 .py 檔案中的函數,操作如下:

  1. 建立Python資源

    1. 在資料開發頁面,按右鍵目標商務程序,選擇建立資源 > MaxCompute > Python

    2. 建立資源對話方塊中,填寫資源名稱(樣本名:my_utils.py),單擊建立

    3. 在Python資源中輸入如下代碼。

      # my_utils.py Python3文法
      def say_hello(name):
          print(f"Hello, {name}! This is from my_utils module.")
    4. 儲存提交該資源。

  2. 建立PyODPS 3節點並引用資源

    • 在目標商務程序,按右鍵MaxCompute,選擇建立節點 > PyODPS 3,按介面完成節點建立。

    • 在節點中通過##@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")
  3. 運行節點,您將在日誌中看到 "Hello, DataWorks! This is from my_utils module." 的輸出。

常見問題

  • Q:通過命令手動安裝包時,自訂鏡像測試很久沒進度。

    • 如果任務啟動並執行環境需要依賴位於公網的第三方包,則Serverless資源群組綁定的VPC需要具備公網訪問能力。具體操作請參見為資源群組開通公網

    • 可切換嘗試不同Python包來源,例如https://mirrors.aliyun.com/pypi/simple/。阿里雲鏡像不需要公網訪問。

  • Q:如果匯入第三方包失敗,請按以下步驟排查。

    1. 確認自訂鏡像是否已發布成功

    2. 確認鏡像支援的任務類型(PyODPS 2/3)與您建立的節點類型匹配。

    3. 確認PyODPS節點的調度配置中,是否正確選擇該自訂鏡像。

      資源群組不可選擇公用資源群組。
    4. 檢查安裝的包版本是否與您的Python版本相容(例如 pendulum 2.0+ 不支援Python 2)。

相關文檔