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) |
|
|
Empaqueter un package PyPI (mode sans Docker) |
|
|
Empaqueter une version spécifique |
|
|
Empaqueter pour Python 2.7 dans MaxCompute |
|
|
Empaqueter pour Python 2.7 dans DataWorks |
|
|
Empaqueter du code local personnalisé |
|
|
Empaqueter depuis un dépôt Git |
|
|
Empaqueter avec des dépendances binaires |
|
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 |
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).
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,
containerdpeut ne pas fonctionner comme moteur de conteneur. Utilisez plutôtdockerd. Consultez la section Container Engine pour les étapes de configuration.
Configurer le mode sans Docker
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
pipest installé dans votre environnement Python.Sous Windows, installez Git Bash (inclus dans Git for Windows).
Empaqueter des dépendances PyPI
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-packavecsudopour garantir que Docker dispose des autorisations nécessaires.Sous macOS, n'utilisez pas
sudoavecpyodps-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.
-
Créez un script nommé
install-gdal.shqui 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 -
Exécutez
pyodps-packavec le script et la dépendance de compilationoldest-supported-numpy:pyodps-pack --install-requires oldest-supported-numpy --run-before install-gdal.sh gdal==3.6.0
Paramètres
|
Paramètre |
Description |
|
|
Fichier de dépendances requis pour l'empaquetage. Peut être spécifié plusieurs fois. |
|
|
Nom de l'archive de sortie. Valeur par défaut : |
|
|
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. |
|
|
Fichier répertoriant les dépendances PyPI requises au moment de l'empaquetage, au format |
|
|
Script Bash à exécuter avant l'empaquetage. Généralement utilisé pour installer des dépendances binaires. |
|
|
Dépendance PyPI à exclure de l'archive de sortie. Peut être spécifiée plusieurs fois. |
|
|
Exclut les dépendances transitives de l'archive de sortie. |
|
|
URL de l'index PyPI. La valeur par défaut correspond à |
|
|
Hôte HTTPS dont les erreurs de certificat doivent être ignorées pendant l'empaquetage. |
|
|
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. |
|
|
Génère un package pour Python 2.7 dans MaxCompute. Active |
|
|
Génère un package pour Python 2.7 dans DataWorks. Active |
|
|
Privilégie les distributions binaires plus anciennes sur PyPI par rapport aux nouvelles distributions disponibles uniquement en source. |
|
|
Arguments supplémentaires à transmettre à Docker. Encadrez plusieurs arguments par des guillemets doubles, par exemple : |
|
|
Exécute |
|
|
Conserve les fichiers |
|
|
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 |
|
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 |
Moteur de conteneur incompatible |
Basculez vers |
|
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 |
|
Dépendance optionnelle manquante à l'exécution |
|
Ajoutez explicitement la dépendance optionnelle à la commande, par exemple : |
|
La compilation des dépendances binaires échoue |
Bibliothèques système ou outils de compilation manquants |
Utilisez l'indicateur |
É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.