Tous les produits
Search
Centre de documentation

MaxCompute:Generate a third-party package for PyODPS

Dernière mise à jour :Aug 10, 2026

pyodps-pack est un outil en ligne de commande (CLI) fourni avec PyODPS V0.11.3 et versions ultérieures. Il empaquette les dépendances Python — packages PyPI, code personnalisé, dépôts Git et packages avec des dépendances binaires — dans une archive .tar.gz directement utilisable par les nœuds PyODPS MaxCompute et DataWorks. Son fonctionnement est similaire à celui de pip.

Prérequis

Avant de commencer, vérifiez que :

  • PyODPS V0.11.3 ou version ultérieure est installé.

  • Docker est installé et en cours d'exécution (requis pour le mode Docker, activé par défaut).

  • Python 3 est disponible (recommandé ; l'empaquetage avec Python 2 peut échouer pour les nouveaux projets).

Scénarios d'empaquetage en un coup d'œil

Utilisez ce tableau pour identifier la commande adaptée à votre scénario, puis suivez les instructions détaillées des sections ci-dessous.

Scénario

Commande

Empaqueter un package PyPI (mode Docker)

pyodps-pack pandas

Empaqueter un package PyPI (mode sans Docker)

pyodps-pack --without-docker pandas

Empaqueter une version spécifique

pyodps-pack pandas==1.2.5

Empaqueter pour Python 2.7 dans MaxCompute

pyodps-pack --mcpy27 pandas

Empaqueter pour Python 2.7 dans DataWorks

pyodps-pack --dwpy27 pandas

Empaqueter du code local personnalisé

pyodps-pack /<path_to_package>/test_package_root

Empaqueter depuis un dépôt Git

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

Empaqueter avec des dépendances binaires

pyodps-pack --run-before install-gdal.sh gdal==3.6.0

Fonctionnement

pyodps-pack s'installe automatiquement avec PyODPS. Sous Linux et macOS, l'exécutable se trouve dans le répertoire bin du chemin d'installation de Python. Sous Windows, il réside dans le répertoire Scripts. Exécutez les commandes pyodps-pack depuis l'invite de commandes Windows, le terminal macOS ou le shell Linux, et non depuis la console DataWorks, le client MaxCompute (odpscmd) ou l'interpréteur Python.

Si le répertoire bin ou Scripts figure déjà dans votre variable d'environnement PATH (définie lors de l'installation de Python ou de l'activation d'un environnement virtuel), aucune configuration supplémentaire n'est nécessaire. Sinon, accédez au répertoire manuellement ou ajoutez-le à la variable PATH.

Une fois l'empaquetage terminé, pyodps-pack affiche les versions résolues de toutes les dépendances et génère le fichier packages.tar.gz dans le répertoire courant.

Choisir un mode d'empaquetage

pyodps-pack prend en charge deux modes :

Mode

Cas d'utilisation

Activation

Mode Docker (par défaut)

Tous les cas où Docker est disponible. Produit les packages les plus compatibles.

Installez Docker ; aucun indicateur supplémentaire n'est requis.

Mode sans Docker

Uniquement lorsque Docker n'est pas disponible dans votre environnement.

Ajoutez l'indicateur --without-docker.

Avertissement

Les packages générés en mode sans Docker peuvent ne pas fonctionner dans MaxCompute ou DataWorks. Privilégiez le mode Docker chaque fois que possible.

Configurer Docker

pyodps-pack appelle Docker automatiquement et extrait les images requises ; aucune gestion manuelle des images n'est nécessaire.

Linux : consultez la page Install Docker Engine.

macOS ou Windows :

  • Développeurs individuels : utilisez Docker Desktop.

  • Utilisateurs en entreprise ne pouvant pas utiliser Docker Desktop : utilisez Rancher Desktop (open source).

Remarque

pyodps-pack n'a pas été testé dans d'autres environnements Docker tels que minikube. La disponibilité dans ces environnements n'est pas garantie.

Notes spécifiques à Windows :

  • Windows Server peut être requis pour démarrer le service Docker, mais de nombreuses entreprises le désactivent pour des raisons de sécurité. Si Docker ne démarre pas, basculez sous Linux ou essayez d'activer Windows Server.

  • Sous Windows 10 avec Rancher Desktop, containerd peut ne pas fonctionner comme moteur de conteneur. Utilisez plutôt dockerd. Consultez la section Container Engine pour les étapes de configuration.

Configurer le mode sans Docker

Remarque

N'utilisez le mode sans Docker qu'en l'absence de Docker. Si vous rencontrez des erreurs ou si le package généré ne fonctionne pas, basculez vers le mode Docker.

Ajoutez l'indicateur --without-docker à toute commande pyodps-pack. Avant d'utiliser ce mode :

  • Vérifiez que pip est installé dans votre environnement Python.

  • Sous Windows, installez Git Bash (inclus dans Git for Windows).

Empaqueter des dépendances PyPI

Remarque

Certains packages possèdent des dépendances optionnelles que pyodps-pack n'inclut pas automatiquement. Par exemple, pandas nécessite openpyxl lorsque vous utilisez la méthode to_excel. Consultez la documentation du package tiers et ajoutez explicitement toutes les dépendances optionnelles à la commande.

Remarques d'utilisation :

  • Utilisez Python 3 pour les nouveaux projets MaxCompute. L'empaquetage avec Python 2 peut échouer.

  • Pour les projets Python 2 existants, migrez vers Python 3 afin de simplifier la maintenance.

  • Sous Linux, préfixez les commandes pyodps-pack avec sudo pour garantir que Docker dispose des autorisations nécessaires.

  • Sous macOS, n'utilisez pas sudo avec pyodps-pack ; cela pourrait provoquer des erreurs d'autorisation.

Mode Docker :

pyodps-pack pandas

Mode sans Docker :

pyodps-pack --without-docker pandas

Version spécifique :

pyodps-pack pandas==1.2.5

Après l'empaquetage, pyodps-pack affiche les versions résolues de tous les packages inclus :

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

L'archive de sortie packages.tar.gz est créée dans le répertoire courant.

Empaqueter pour Python 2.7

Si vous avez besoin d'un package Python 2.7, la commande dépend de l'emplacement d'exécution du package. Consultez la rubrique PyODPS DataFrame pour plus de contexte.

Pour MaxCompute :

pyodps-pack --mcpy27 pandas

Pour DataWorks :

pyodps-pack --dwpy27 pandas

Empaqueter du code personnalisé

pyodps-pack empaquette les projets Python personnalisés construits avec setup.py ou pyproject.toml. Pour plus de détails, consultez la page Build System Interface.

L'exemple suivant empaquette un projet basé sur pyproject.toml avec cette structure de répertoires :

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

Exemple de fichier pyproject.toml :

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

Exécutez la commande suivante, en remplaçant <path_to_package> par le répertoire parent de test_package_root :

pyodps-pack /<path_to_package>/test_package_root

Cette opération compresse le projet et toutes ses dépendances dans le fichier packages.tar.gz.

Empaqueter du code depuis un dépôt Git

Transmettez directement l'URL Git :

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

Pour empaqueter une branche ou un tag spécifique :

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

Si le processus d'empaquetage nécessite des dépendances de compilation (telles que Cython), spécifiez-les avec l'indicateur --install-requires. Ces dépendances sont utilisées pendant l'empaquetage, mais ne sont pas nécessairement incluses dans l'archive de sortie.

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

Vous pouvez également répertorier les dépendances de compilation dans un fichier au format requirements.txt et le transmettre avec l'indicateur --install-requires-file :

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

Empaqueter des dépendances binaires

Certains packages incluent des composants binaires, tels que des bibliothèques de liaison dynamique, qui doivent être compilés avant l'empaquetage. Utilisez l'indicateur --run-before pour exécuter un script Bash qui installe ces composants binaires avant l'exécution de pyodps-pack.

L'exemple suivant empaquette GDAL 3.6.0, qui nécessite libgdal (version > 3.6.0) et PROJ (version 6.0 ou ultérieure), tous deux compilés avec CMake.

  1. Créez un script nommé install-gdal.sh qui compile et installe PROJ et GDAL :

    #!/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. Exécutez pyodps-pack avec le script et la dépendance de compilation oldest-supported-numpy :

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

Paramètres

Paramètre

Description

-r, --requirement <file>

Fichier de dépendances requis pour l'empaquetage. Peut être spécifié plusieurs fois.

-o, --output <file>

Nom de l'archive de sortie. Valeur par défaut : packages.tar.gz.

--install-requires <item>

Dépendance PyPI requise au moment de l'empaquetage (pas nécessairement incluse dans l'archive de sortie). Peut être spécifiée plusieurs fois.

--install-requires-file <file>

Fichier répertoriant les dépendances PyPI requises au moment de l'empaquetage, au format requirements.txt. Peut être spécifié plusieurs fois.

--run-before <script-file>

Script Bash à exécuter avant l'empaquetage. Généralement utilisé pour installer des dépendances binaires.

-x, --exclude <dependency>

Dépendance PyPI à exclure de l'archive de sortie. Peut être spécifiée plusieurs fois.

--no-deps

Exclut les dépendances transitives de l'archive de sortie.

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

URL de l'index PyPI. La valeur par défaut correspond à global.index-url issue de pip config list, configurée dans pip.conf.

--trusted-host <host>

Hôte HTTPS dont les erreurs de certificat doivent être ignorées pendant l'empaquetage.

-l, --legacy-image

Utilise une image CentOS 5 pour l'empaquetage. Garantit la compatibilité avec les environnements plus anciens, tels que les versions antérieures d'Apsara Stack.

--mcpy27

Génère un package pour Python 2.7 dans MaxCompute. Active --legacy-image par défaut.

--dwpy27

Génère un package pour Python 2.7 dans DataWorks. Active --legacy-image par défaut.

--prefer-binary

Privilégie les distributions binaires plus anciennes sur PyPI par rapport aux nouvelles distributions disponibles uniquement en source.

--docker-args <args>

Arguments supplémentaires à transmettre à Docker. Encadrez plusieurs arguments par des guillemets doubles, par exemple : --docker-args "--ip 192.168.1.10".

--without-docker

Exécute pyodps-pack en mode sans Docker. Les packages avec des dépendances binaires peuvent échouer ou produire une sortie inutilisable.

--without-merge

Conserve les fichiers .whl au lieu de les fusionner dans une archive .tar.gz.

--debug

Affiche la sortie détaillée de l'exécution de la commande pour le dépannage.

Dépanner les échecs d'empaquetage

Symptôme

Cause probable

Résolution

Le package généré en mode sans Docker ne fonctionne pas dans MaxCompute ou DataWorks

Le mode sans Docker ne dispose pas de l'environnement OS correspondant

Passez au mode Docker : supprimez l'indicateur --without-docker

Docker ne parvient pas à démarrer sous Windows

Windows Server est désactivé par votre organisation

Basculez sous Linux ou essayez d'activer Windows Server

Erreur containerd avec Rancher Desktop sous Windows 10

Moteur de conteneur incompatible

Basculez vers dockerd dans les paramètres Container Engine de Rancher Desktop

L'empaquetage échoue avec Python 2

L'empaquetage Python 2 peut échouer pour les packages plus récents

Utilisez Python 3 ; si Python 2.7 est requis, utilisez --mcpy27 (MaxCompute) ou --dwpy27 (DataWorks)

Dépendance optionnelle manquante à l'exécution

pyodps-pack n'inclut pas automatiquement les dépendances optionnelles

Ajoutez explicitement la dépendance optionnelle à la commande, par exemple : pyodps-pack pandas openpyxl

La compilation des dépendances binaires échoue

Bibliothèques système ou outils de compilation manquants

Utilisez l'indicateur --run-before pour installer les bibliothèques système requises avant l'empaquetage ; ajoutez l'indicateur --debug pour obtenir une sortie détaillée

Étapes suivantes

Après avoir généré le package, téléchargez-le dans MaxCompute en tant que ressource d'archive et référencez-le dans votre nœud PyODPS. Consultez la rubrique Référencer un package tiers dans un nœud PyODPS.