Maison  >  Article  >  développement back-end  >  Créer et publier un package Python privé sur GitHub

Créer et publier un package Python privé sur GitHub

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 22:18:30985parcourir

Introduction

En tant qu'ingénieurs logiciels, nous nous retrouvons souvent à réutiliser du code dans différents modules et projets. Mais soyons réalistes, cette répétition crée un défi : lorsque nous devons ajuster ou corriger ce code, nous devons effectuer les mêmes modifications à plusieurs endroits. Pour ceux d'entre nous qui apprécient l'efficacité et l'automatisation, la solution est claire : créer un package distinct qui peut être installé et utilisé dans nos projets.
Cependant, lorsqu'il s'agit de code confidentiel, nous ne pouvons pas simplement publier notre package sur des référentiels publics comme PyPI. Au lieu de cela, nous devons le déployer sur un référentiel privé tel que GitHub ou GitLab. Cette approche nous permet de maintenir la sécurité tout en bénéficiant de la commodité d'un emballage réutilisable.

Dans ce tutoriel, nous vous guiderons tout au long du processus de :

  1. Création d'un package Python
  2. Déploiement du package sur un dépôt privé (GitHub)
  3. Installation du package dans un environnement virtuel (venv)

En suivant ces étapes, vous pourrez réduire la duplication de code et simplifier la maintenance du code partagé dans vos projets.

Remarque : DRY ne signifie pas seulement « Ne vous répétez pas » : c'est aussi un choix de style de vie.

Create and Release a Private Python Package on GitHub

1. Configuration de la structure de votre projet

Tout d'abord, définissons une structure de projet de base pour notre package Python :

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

Décomposons l'anatomie de notre package Python privé. Chaque fichier et répertoire joue un rôle crucial pour rendre notre package fonctionnel et installable :

  • my-package/ : Il s'agit du répertoire racine de notre projet. C'est comme une maison qui contient toutes les pièces (fichiers) dont nous avons besoin.
  • my_package/ : ce sous-répertoire est l'endroit où se trouve le code Python réel. Il porte le même nom que notre package pour plus de clarté.
    • __init__.py : ce fichier permet à Python de traiter le répertoire comme un package. Il peut être vide ou exécuter le code d'initialisation du package.
    • module1.py : C'est ici que nous mettons notre code principal. Vous pouvez avoir plusieurs fichiers de module en fonction de la complexité de votre package.
  • setup.py : Considérez cela comme le manuel d'instructions de notre package. Il contient des métadonnées sur notre package (comme son nom et sa version) et répertorie ses dépendances. Ce fichier est indispensable pour rendre notre package installable via pip.
  • exigences.txt : ce fichier répertorie tous les packages Python externes dont dépend notre projet. C'est comme une liste de courses pour pip, lui indiquant exactement quoi installer pour que notre package fonctionne.
  • README.md : Ceci est le tapis de bienvenue de notre projet. C'est généralement la première chose que les gens voient lorsqu'ils visitent notre référentiel GitHub, nous l'utilisons donc pour expliquer ce que fait notre package, comment l'installer et comment l'utiliser.
  • .gitignore : ce fichier indique à Git quels fichiers ou répertoires ignorer. C'est pratique pour garder le code compilé, les fichiers temporaires ou les informations sensibles hors du contrôle de version.
  • LICENCE : ce fichier spécifie comment d'autres peuvent utiliser, modifier ou distribuer notre package. C'est crucial pour les projets open source et contribue à protéger notre travail.
  • MANIFEST.in : ce fichier est utilisé pour inclure des fichiers non Python dans notre distribution de packages. Si nous avons des fichiers de données, de la documentation ou d'autres ressources qui doivent être inclus, nous les répertorions ici.
  • build.pipeline.yml : ce fichier définit notre pipeline d'intégration continue/déploiement continu (CI/CD). Il automatise des tâches telles que l'exécution de tests et la création du package lorsque nous transmettons des modifications à notre référentiel GitHub.

2. Création du code du package

Créons un module simple au sein de notre package. Dans mon_package/module1.py :

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

Dans my_package/__init__.py, nous importerons notre module :

class Hello:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, {self.name}!"

3. Création de setup.py

Le fichier setup.py est crucial pour empaqueter notre projet. Voici un exemple de base :

from .module1 import Hello

4. Création du fichier exigences.txt

Dans notre fichier exigences.txt, nous incluons les dépendances nécessaires à la construction et à la distribution de notre package :

from setuptools import setup, find_packages

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

setup(
    name="my_package",
    version="0.1",
    include_package_data=True,
    python_requires='>=3.8',
    packages=find_packages(),
    setup_requires=['setuptools-git-versioning'],
    install_requires=requirements,
    author="Abdellah HALLOU",
    author_email="abdeallahhallou33@gmail.com",
    description="A short description of your package",
    long_description=open('README.md').read(),
    long_description_content_type="text/markdown",
    classifiers=[
        "Programming Language :: Python :: 3.8",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    version_config={
       "dirty_template": "{tag}",
    }
)

5. Création et installation de votre package

Installez la configuration requise. Pour garder les choses simples, nous utiliserons l'environnement virtuel Python.

setuptools==69.2.0
wheel
twine

Pour construire notre package :

python -m venv env
source env/bin/activate # for linux and mac
./env/Scripts/activate # for windows
pip install -r requirements.txt

Pour installer notre package localement à des fins de test :

python setup.py sdist bdist_wheel

Vous pouvez valider votre travail et ignorer les dossiers en utilisant le fichier .gitignore :

https://github.com/github/gitignore/blob/main/Python.gitignore

6. Publier le package sur GitHub avec une balise

Pour publier le package, créez d'abord un fichier build.pipeline.yml à la racine du projet my-package/ et validez-le. Le déploiement se fera avec twine, la bibliothèque que nous avons installée auparavant :

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

Si vous devez inclure des fichiers non Python avec l'installation de votre module, vous pouvez utiliser un fichier MANIFEST.in. Ce fichier spécifie quels fichiers supplémentaires doivent être inclus dans la distribution de votre package.

class Hello:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, {self.name}!"

Ensuite, téléchargez le package :

from .module1 import Hello

7. Installer le package

Créez un jeton d'accès :

  • Allez dans Paramètres > Paramètres du développeur > Jetons d'accès personnels (classique) > Générer un nouveau jeton.
  • Assurez-vous de vérifier la portée write:packages pour accorder les autorisations nécessaires.

Une fois que vous avez votre token, conservez-le en sécurité, car vous en aurez besoin pour installer votre package.

Sur votre machine, vous pouvez installer votre package privé en utilisant le modèle suivant :

from setuptools import setup, find_packages

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

setup(
    name="my_package",
    version="0.1",
    include_package_data=True,
    python_requires='>=3.8',
    packages=find_packages(),
    setup_requires=['setuptools-git-versioning'],
    install_requires=requirements,
    author="Abdellah HALLOU",
    author_email="abdeallahhallou33@gmail.com",
    description="A short description of your package",
    long_description=open('README.md').read(),
    long_description_content_type="text/markdown",
    classifiers=[
        "Programming Language :: Python :: 3.8",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    version_config={
       "dirty_template": "{tag}",
    }
)

Conclusion

Bravo, vous savez maintenant comment créer et déployer vos propres packages privés avec Python sur GitHub.

Lien du référentiel Github : https://github.com/ABDELLAH-Hallou/Private-Python-Package-Deployment

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn