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 :
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.
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 :
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}!"
Le fichier setup.py est crucial pour empaqueter notre projet. Voici un exemple de base :
from .module1 import Hello
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}", } )
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
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
Créez un jeton d'accès :
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}", } )
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!