Comment publier votre propre package Python sur PyPi
par Marco Massenzio
Vous souhaitez partager votre code Python avec d'autres développeurs ? Vous souhaitez faciliter la vie de vos utilisateurs lors de l’installation de votre package ? Ensuite, vous devez publier vos packages Python sur PyPi.
La bonne nouvelle est que c’est désormais plus facile que jamais. Il s'agit d'un petit guide qui vous guidera tout au long du processus et vous orientera vers la documentation pertinente tout au long du processus.
Étape 1 : Créez un fichier setup.py
Les arguments de setup() sont documentés ici et ne sont pas triviaux. Un bon exemple à suivre est le fichier setup.py de mon projet filecrypt.
Ci-dessous un bref extrait. Encore une fois, assurez-vous de lire la documentation pour plus d'informations à ce sujet, car elle explique bien mieux que moi ce que signifient tous ces arguments, même avec un article Medium complet pour le faire :
setup(name='crytto', description='An OpenSSL-based file encryption and decryption utility', long_description=long_description, version='0.2.0', url='https://github.com/massenz/filecrypt', author='M. Massenzio', author_email='marco@alertavert.com', license='Apache2', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3' ], packages=['crytto'], install_requires=[ 'PyYAML>=3.11', 'sh>=1.11' ], entry_points={ 'console_scripts': [ 'encrypt=crytto.main:run' ] })
Remarque : Ne confondez pas setuptools avec distutils — voici l'importation correcte pour setup.py :
from setuptools import setup
La partie la plus délicate consiste à déterminer les noms des packages et la configuration correcte pour vos fichiers de script. Il est probablement préférable de les décider à l'avance, mais vous pouvez toujours les rectifier lors de la création de votre setup.py.
Le plus grand défi est de trouver un nom de package de premier niveau qui n'entre pas en conflit avec un nom existant. Pour autant que je sache, il s’agit actuellement principalement d’un processus d’essais et d’erreurs.
Une fois que le fichier setup.py est en bon état, vous pouvez essayer de construire une roue :
python setup.py bdist_wheel
Après cela, il est recommandé de créer un nouveau virtualenv et d'essayer d'installer le nouveau package dans celui-ci :
virtualenv test_env./test_env/bin/activatepip install dist/my-project.whl
Ceci est particulièrement utile pour tester si les console_scripts ont été correctement configurés.
Si vous utilisez des classificateurs comme dans :
classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3']
… alors assurez-vous de consulter la liste des classificateurs, car toute autre chose provoquerait une erreur et empêcherait l’enregistrement.
Enregistrez votre projet
Remarque : La documentation m'a dit d'utiliser de la ficelle pour cette étape, mais cela n'a pas fonctionné pour moi. Votre kilométrage peut varier.
Sauf si vous possédez déjà un compte sur PyPi, vous devrez en créer un, puis vous connecter.
Vous pouvez ensuite vous rendre sur le formulaire d'inscription et télécharger votre fichier PKG_INFO. Celui-ci a été créé dans un répertoire [prj name].egg-info/. Cela peut prendre un peu d'allers-retours, pendant que vous essayez d'apaiser les dieux de PyPi pour qu'ils acceptent vos choix de configuration.
En particulier, trouver un nom de package non conflictuel mais significatif peut prendre plus de tentatives que prévu. Encore une fois, je vous recommande de planifier, car je n'ai pas trouvé de moyen simple de répertorier tous les noms de packages. Si vous en connaissez un, n'hésitez pas à laisser un commentaire. Vous remarquerez que, selon PyPi…
There are currently 88906 packages here.
(« ici » étant PyPi, au 16 septembre 2016).
Télécharger sur PyPi
Une fois l'enregistrement réussi, le téléchargement proprement dit est plutôt simple, en utilisant Twine :
twine upload dist/*
À condition que vous ayez un ~/.pypirc valide, il vous demandera simplement votre mot de passe. Il vous suffit alors de :
$ cat ~/.pypirc [distutils] index-servers=pypi
[pypi] repository = https://upload.pypi.org/legacy/ username = [your username]
C'est ça. Profitez de la création et du partage de vos packages Python !
J'ai initialement publié ceci sur mon blog à codetrips.com.