Python ou pas, il est vert !

Vous venez de terminer votre nouveau module Python ! Évidemment, vous l'avez testé dans tous les sens, et souhaitez le déployer vite fait, bien fait. Un module aisément installable, quelque soit le système d'exploitation, est appréciable pour tout le monde ☺

C'est là qu'entre en jeu pip. Je ne rentrerai pas dans les détails du fonctionnement de pip, d'autres les font très bien. Je m'attarderai plutôt sur la création des fichiers nécessaires ainsi que l'envoi au serveur.
Pour les pressés, voici la commande :

python setup.py sdist upload

Préparer la base

Vous avez sûrement déjà vu un de ces fameux setup.py, et bien c'est lui qui gère tout. Vous pouvez voir les projets MSS ou minibelt pour vous en inspirer ; voici un exemple tiré du module MSS :

#!/usr/bin/env python
# coding: utf-8

# Import du module de gestion
from setuptools import setup

# En option, importez la version de votre module
from mss import __version__


# Dans le fichier MANIFEST.in, on y liste les fichiers et dossiers à inclure
# dans l'archive qui sera déployée.
open('MANIFEST.in', 'w').write('\n'.join((
    'include *.rst',
    # un_dossier/*.py
    # un_autre_fichier.py
    # prune archives/  <-- ne pas inclure le dossier archives
)))


# Liste des thèmes en relation avec le module
classifiers = [
    'Programming Language :: Python',
    'Intended Audience :: Developers',
    'Intended Audience :: Information Technology',
    'License :: OSI Approved :: zlib/libpng License',
    'Natural Language :: English',
    'Programming Language :: Python :: 2.6',
    'Programming Language :: Python :: 3.4',
    'Topic :: Multimedia :: Graphics :: Capture :: Screen Capture'
]

# Configuration du module
config = {
    'name': 'mss',
    'version': __version__,
    'author': 'Tiger-222',
    'author_email': 'contact@tiger-222.fr',
    'maintainer': 'Tiger-222',
    'maintainer_email': 'contact@tiger-222.fr',
    'url': 'https://github.com/BoboTiG/python-mss',
    'description': 'An ultra fast cross-platform multiple screenshots module in pure python using ctypes.',
    'long_description': open('README.rst').read(),
    'classifiers': classifiers,
    'platforms': ['Darwin', 'Linux', 'Windows'],
    'license': 'zlib/libpng'
}

setup(**config)

Vous aurez remarquer la présence d'un certain README.rst (format ReStructuredText), il s'agit de la description complète du module (ses classes et méthodes, exemples, ...).
La liste des classifiers se trouve ici : List trove classifiers.

En passant, GitHub accepte les fichiers README.rst, pratique ! Et voici une visionneuse de fichiers RST : Online reStructuredText editor.


Le déploiement

Créer le dépôt

Étape inutile de nos nos jours, vous pouvez passer à la suivante.

Ouvrez une console, rendez-vous dans le répertoire du projet, puis :

python setup.py register
running register
running check
We need to know who you are, so please choose either:
 1. use your existing login,
 2. register as a new user,
 3. have the server generate a new password for you (and email it to you), or
 4. quit
Your selection [default 1]:

Si vous n'avez pas encore de compte, prenez l'option 2, sinon la 1.

Si tout s'est bien passé, vous devriez avoir ce genre de message :

Registering mss to http://pypi.python.org/pypi
Server response (200): OK

Voilà, votre module est en ligne !


Envoyer le module

La page du module a été créée, mais aucun fichier n'est disponible en téléchargement. Cette commande génère une archive puis l'envoie au serveur :

python setup.py sdist upload
running sdist
running check
warning: sdist: standard file not found: should have one of README, README.txt

reading manifest template 'MANIFEST.in'
writing manifest file 'MANIFEST'
creating mss-0.0.2
making hard links in mss-0.0.2...
hard linking README.rst -> mss-0.0.2
hard linking mss.py -> mss-0.0.2
hard linking setup.py -> mss-0.0.2
creating dist
Creating tar archive
removing 'mss-0.0.2' (and everything under it)
Submitting dist/mss-0.0.2.tar.gz to http://pypi.python.org/pypi
Upload (200): OK

Emballé, c'est pesé !

Vous pouvez de suite installer le module fraîchement déployé :

pip install mss

Sources :


Historique

  • 2016-10-02 : mise à jour du script setup.py et notification à propos de l'inutilité de l'enregistrement du module.