すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:PyODPS用のサードパーティパッケージを生成する

最終更新日:Jan 17, 2025

pyodps-packコマンドラインインターフェイス (CLI) ツールは、PyODPS V0.11.3以降で提供されています。 このツールは、PyODPS標準およびDataWorks PyODPSノード標準に準拠したサードパーティパッケージを生成するために使用されます。 操作方法は、pipコマンドを使用する方法と同様です。 このツールを使用して、. tar.gzMaxComputeまたはDataWorksでコンパイルおよびパッケージ化されたプロジェクトの依存関係を含む、すべてのプロジェクトの依存関係を含むファイル。 このツールを使用して、カスタムPythonコードをプロジェクトにパッケージ化することもできます。

環境の配置

pyodps-packは、PyODPSのインストール時にインストールされ、LinuxおよびmacOSのbinディレクトリ、またはWindowsのScriptsディレクトリのPythonインストールパスの下にあります。 pyodps-packを個別にインストールする必要はありません。

pyodps-packコマンドは、Windows CLI、macOS、またはLinux Shellで実行できます。 これらのコマンドは、DataWorksコンソール、MaxComputeクライアント (odpscmd) 、またはPython CLIでは実行できません。

binまたはScriptsディレクトリがPATH環境変数に含まれている場合 (Pythonのインストール時またはPython仮想環境のアクティブ化時に構成される) 、ディレクトリを使用するために追加の手順は必要ありません。 ディレクトリが環境変数に含まれていない場合は、手動でディレクトリに移動するか、PATH環境変数を変更する必要があります。

Dockerモード

Dockerモードでpyodps-packツールを実行するには、Dockerをインストールする必要があります。 pyodps-packツールは、インストールしたDockerを自動的に呼び出し、イメージをダウンロードできます。 したがって、イメージを手動でダウンロードしてDockerコマンドを実行する必要はありません。

説明

pyodps-packコマンドはDockerモードでのみ実行できます。 非Dockerモードでpyodps-packコマンドを実行すると、エラーが報告されます。

  • Linuxオペレーティングシステム: LinuxにDockerをインストールする方法の詳細については、「Docker Engineのインストール」をご参照ください。

  • macOSまたはWindowsオペレーティングシステム:

    • 個人開発者の場合は、Docker Desktopを使用できます。

    • 権限のないエンタープライズユーザーの場合は、オープンソースのRancher Desktopを使用することを推奨します。

説明

pyodps-packツールは、minikubeなどの他のDocker環境ではテストされません。 これらの環境でのツールの可用性は保証できません。

Windowsオペレーティングシステムを使用している場合、Dockerサービスを開始するためにWindows Serverが必要になる場合があります。 ただし、Windows Serverは、セキュリティ上の懸念から、多数の企業によって無効になっています。 問題が発生した場合は、代わりにLinuxオペレーティングシステムを使用するか、Windows Serverを起動してください。 Rancher Desktopを使用する場合、Windows 10ではcontainerdをコンテナーエンジンとして使用できません。 代わりにdockerdを使用することができます。 コンテナーエンジンの設定方法の詳細については、「コンテナーエンジン」をご参照ください。

非Dockerモード

説明

環境がDockerをサポートしている場合は、すべてのPyODPS依存関係、コード、およびコードをDockerモードのGitリポジトリにパッケージ化することを推奨します。 環境がDockerをサポートしていない場合にのみ、非Dockerモードの使用を検討できます。 非Dockerモードで生成されたパッケージは使用できない場合があります。

Dockerのインストールに問題がある場合は、-- without-Dockerパラメーターを追加して、非dockerモードの使用を試みることができます。 Docker以外のモードを使用する前に、pipをPython環境にインストールする必要があります。 pyodps-packコマンドを非Dockerモードで実行したときにエラーが発生した場合、または生成されたパッケージを使用できない場合は、代わりにDockerモードを使用します。 WindowsユーザーがDocker以外のモードを使用する場合は、Git for Windowsに含まれているGit Bashをインストールする必要があります。

パッケージの生成

制限事項

  • MaxComputeで新しく作成したプロジェクト用に、Python 3でパッケージを生成することを推奨します。 Python 2で次の手順を実行すると、パッケージング操作が失敗する可能性があります。

  • 既存のプロジェクトについては、これらのプロジェクトをPython 3に移行することを推奨します。 これにより、その後のメンテナンス作業が簡単になります。

  • Linuxオペレーティングシステムで次のコマンドを実行する場合、sudoを使用してpyodps-packツールを呼び出す必要があります。 これにより、Dockerの通常の動作が保証されます。

  • 許可エラーを回避するために、macOSで次のセクションのコマンドを実行するときにsudoを使用してpyodps-packツールを呼び出さないでください。

すべての依存関係をパッケージ化

説明

特定のPythonパッケージには、オプションの依存関係があります。 たとえば、to_excelメソッドを使用する場合、pandasはopenpyxlパッケージに依存します。 pyodps-packは、オプションの依存関係を自動的に含めることはできません。 サードパーティのパッケージドキュメントの関連する説明に基づいて、これらの依存関係をパッケージ化コマンドに手動で追加する必要があります。

PyODPSをインストールした後、次のコマンドを実行して、ローカルCLIでPython 3のパンダとパンダの依存関係をパッケージ化できます。

  • すべての依存関係をDockerモードでパッケージ化します。

    pyodps-pack pandas
  • すべての依存関係を非Dockerモードでパッケージ化します。

    pyodps-pack --without-docker pandas
  • パッケージ依存関係のpandasバージョンを指定します。

    pyodps-pack pandas==1.2.5

パッケージ化操作を実行すると、次のコードに示すように、すべての依存関係パッケージのバージョンがpyodps-packツールに表示されます。 packages.tar.gzファイルは現在のディレクトリに生成されます。 このファイルには、次の依存関係パッケージが含まれます。

Package         Version
--------------- -------
numpy           1.21.6
pandas          1.2.5
python-dateutil 2.8.2
pytz            2022.6
six             1.16.0

Python 2.7でパッケージを生成する場合は、生成されたパッケージがMaxComputeまたはDataWorksで使用されているかどうかを確認します。 詳細については、「PyODPS DataFrame」をご参照ください。

  • 生成されたパッケージをMaxComputeで使用する場合は、次のコマンドを実行します。

    pyodps-pack --mcpy27 pandas
  • DataWorksで生成されたパッケージを使用する場合は、次のコマンドを実行します。

    pyodps-pack --dwpy27 pandas

パッケージカスタムコード

pyodps-packツールを使用して、setup.pyまたはpyproject.tomlファイルに基づいて作成されたカスタムPythonプロジェクトをパッケージ化できます。 詳細については、「ビルドシステムインターフェイス」をご参照ください。

この例では、pyodps-packツールを使用して、pyproject.tomlファイルに基づいて作成されたプロジェクトをパッケージ化します。 プロジェクトは次のディレクトリ構造を使用します。

test_package_root
├── test_package
│   ├── __init__.py
│   ├── mod1.py
│   └── subpackage
│       ├── __init__.py
│       └── mod2.py
└── pyproject.toml 

pyproject.tomlファイルには、次のデータが含まれている場合があります。

[project]
name = "test_package"
description = "pyodps-pack example package"
version = "0.1.0"
dependencies = [
    "pandas>=1.0.5"
]

パッケージが生成されたら、次のコマンドを実行して、生成されたパッケージとすべての依存関係パッケージをpackages.tar.gzファイルに圧縮します。 コマンドで、path_to_packagetest_package_rootの上位ディレクトリに置き換えます。

pyodps-pack /<path_to_package>/test_package_root

Gitリポジトリにコードをパッケージ化する

pyodps-packツールを使用して、GitHubリポジトリなどのGitリポジトリにコードをパッケージ化できます。 たとえば、次のコマンドを実行してPyODPSコードをパッケージ化できます。

pyodps-pack git+https://github.com/aliyun/aliyun-odps-python-sdk.git

ブランチまたはタグをパッケージ化する場合は、次のコマンドを実行します。

pyodps-pack git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

コードをパッケージ化するには、パッケージ化に必要な依存関係 (Cythonなど) をインストールする必要があります。 -- install-requiresパラメーターを使用して、インストールに必要な依存関係を指定できます。 requirements.txtファイルと同じ形式のinstall-requires.txtという名前のファイルを記述し、-- install-requiles.txtパラメーターを使用して記述したファイルを指定することもできます。 たとえば、PyODPSコードをパッケージ化する前にCythonをインストールする必要がある場合は、次のコマンドを実行します。

pyodps-pack \
    --install-requires cython \
    git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

次のコマンドを実行して、install-requires.txtという名前のファイルを作成し、requirements.txtファイルの形式に基づいてファイルにコンテンツを書き込むこともできます。 サンプルファイルの内容:

cython>0.29

Sample packagingコマンド:

pyodps-pack \
    --install-requires-file install-requires.txt \
    git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

パッケージバイナリ依存関係

一部のパッケージには、コンパイルまたはインストールに必要なダイナミックリンクライブラリなど、追加のバイナリ依存関係が含まれています。 pyodps-packツールには、-- run-beforeパラメーターがあり、パッケージング操作の前に実行する必要がある手順を指定します。 指定したステップで、必要なバイナリ依存関係をインストールできます。 次の例では、Geospatial Data Abstraction Library (GDAL) をパッケージ化する方法について説明します。

  1. パッケージング中にインストールする必要があるバイナリ依存関係を決定します。

    PyPIのGDAL 3.6.0のドキュメントに基づいて、3.6.0以降のバージョンにlibgdalをインストールします。 libgdalコンパイル手順で説明したように、パッケージにはバージョン6.0以降のPROJパッケージが必要です。 両方のバイナリパッケージは、CMakeを使用してファイルに圧縮する必要があります。 これらのバイナリ依存関係をコンパイルするためのスクリプトファイルを作成し、install-gdal.shとして保存します。

    #!/bin/bash
    set -e
    
    cd /tmp
    curl -o proj-6.3.2.tar.gz https://download.osgeo.org/proj/proj-6.3.2.tar.gz
    tar xzf proj-6.3.2.tar.gz
    cd proj-6.3.2
    mkdir build && cd build
    cmake ..
    cmake --build .
    cmake --build . --target install
    
    cd /tmp
    curl -o gdal-3.6.0.tar.gz http://download.osgeo.org/gdal/3.6.0/gdal-3.6.0.tar.gz
    tar xzf gdal-3.6.0.tar.gz
    cd gdal-3.6.0
    mkdir build && cd build
    cmake ..
    cmake --build .
    cmake --build . --target install
  2. 次のコマンドを実行して、pyodps-packツールを使用してパッケージを生成します。

    pyodps-pack --install-requires oldest-supported-numpy --run-before install-gdal.sh gdal==3.6.0

パラメーター

次の表に、pyodps-packコマンドで使用できるパラメーターを示します。 パラメータを使用して、パッケージングプロセスを制御できます。

パラメーター

説明

-r, -- requirement <file>

パッケージ化に必要な依存関係ファイル。 パラメーターは複数回指定できます。

-o, -- output <file>

生成するパッケージの名前。 デフォルト値: packages.tar.gz

-- install-requires <item>

パッケージングに必要なPyPI依存関係。 複数のPyPI依存関係を指定できます。 このパラメーターはCLIで使用されます。 これらの依存関係ファイルは、必ずしも生成されたパッケージに含まれません。

-- install-requires-file <file>

パッケージングに必要なPyPI依存関係ファイル。 複数のファイルを指定できます。 これらの依存関係ファイルは、必ずしも生成されたパッケージに含まれません。

-- run-before <スクリプトファイル>

パッケージ化する前に実行する必要があるBashスクリプト。 ほとんどの場合、Bashスクリプトはバイナリ依存関係をインストールするために使用されます。

-x, -- exclude <dependency>

生成されたパッケージから除外する必要があるPyPI依存関係。 パラメーターは複数回指定できます。

-- no-deps

生成されたパッケージに依存関係が含まれていない特定のプロジェクト。

-i, -- index-url <index-url>

パッケージングに必要なPyPI URL。 デフォルトでは、pip config listコマンドの出力のglobal.index-urlの値が使用されます。 global.index-urlの値は、pip.conf設定ファイルで設定されています。

-- trusted-host <host>

パッケージング中に証明書の問題を無視する必要があるHTTPSドメイン名。

-l, -- legacy-image

パラメータを指定したら、CentOS 5イメージをパッケージに使用できます。 このように、生成されたパッケージは、以前のバージョンのApsara Stackなどの環境で使用できます。

-- mcpy27

このパラメーターを指定すると、MaxComputeでPython 2.7用のサードパーティパッケージが生成されます。 このパラメーターを指定すると、-- legacy-imageで指定されたイメージはデフォルトでパッケージ化が有効になります。

-- dwpy27

このパラメーターを指定すると、DataWorksでPython 2.7用のサードパーティパッケージが生成されます。 このパラメーターを指定すると、-- legacy-imageで指定されたイメージはデフォルトでパッケージ化が有効になります。

-- prefer-binary

このパラメーターを指定すると、ソースコードパッケージのみを含む新しいバージョンではなく、PyPIにバイナリ依存関係を含む以前のバージョンが優先的に選択されます。

-- docker-args <args>

Dockerコマンドの実行に必要な追加パラメーター。 -- docker-args "-- ip 192.168.1.10" など、複数のパラメーターを二重引用符 (") で囲みます。

-- without-docker

このパラメーターを指定すると、pyodps-packツールは非Dockerモードで実行されます。 バイナリ依存関係が存在する場合、エラーが報告されるか、生成されたパッケージが利用できない可能性があります。

-- without-merge

このパラメーターを指定すると、. tar.gzファイルは生成されません。whlファイルがダウンロードまたは生成されます。 この場合、. whlファイルは保持されます。

-- debug

このパラメーターを指定すると、コマンドの実行の詳細が返されます。 返された情報をトラブルシューティングに使用できます。

サードパーティパッケージの使用方法の詳細については、「PyODPSノードでのサードパーティパッケージの参照」をご参照ください。