Sebagai jurutera perisian, kami sering mendapati diri kami menggunakan semula kod merentas modul dan projek yang berbeza. Tetapi mari kita hadapi itu, pengulangan ini mencipta cabaran: apabila kita perlu melaraskan atau membetulkan kod itu, kita perlu membuat perubahan yang sama di beberapa tempat. Bagi kami yang menghargai kecekapan dan automasi, penyelesaiannya jelas - buat pakej berasingan yang boleh dipasang dan digunakan merentas projek kami.
Walau bagaimanapun, apabila berurusan dengan kod sulit, kami tidak boleh hanya menerbitkan pakej kami pada repositori awam seperti PyPI. Sebaliknya, kita perlu menggunakan ia ke repositori peribadi seperti GitHub atau GitLab. Pendekatan ini membolehkan kami mengekalkan keselamatan sambil masih mendapat manfaat daripada kemudahan pakej boleh guna semula.
Dalam tutorial ini, kami akan membimbing anda melalui proses:
Dengan mengikuti langkah ini, anda akan dapat mengurangkan pertindihan kod dan memudahkan penyelenggaraan kod kongsi merentas projek anda.
Nota: DRY bukan sahaja bermaksud "Jangan Ulangi Diri Sendiri" - ia juga merupakan pilihan gaya hidup.
Pertama, mari kita sediakan struktur projek asas untuk pakej Python kami:
my-package/ ├── my_package/ │ ├── __init__.py │ └── module1.py ├── setup.py ├── build.pipeline.yml ├── requirements.txt ├── .gitignore ├── README.md ├── MANIFEST.in └── LICENSE
Mari kita pecahkan anatomi pakej Python peribadi kami. Setiap fail dan direktori memainkan peranan penting dalam menjadikan pakej kami berfungsi dan boleh dipasang:
Mari buat modul ringkas dalam pakej kami. Dalam my_package/module1.py:
my-package/ ├── my_package/ │ ├── __init__.py │ └── module1.py ├── setup.py ├── build.pipeline.yml ├── requirements.txt ├── .gitignore ├── README.md ├── MANIFEST.in └── LICENSE
Dalam my_package/__init__.py, kami akan mengimport modul kami:
class Hello: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!"
Fail setup.py adalah penting untuk membungkus projek kami. Berikut ialah contoh asas:
from .module1 import Hello
Dalam fail requirements.txt kami, kami menyertakan kebergantungan yang diperlukan untuk membina dan mengedarkan pakej kami:
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}", } )
Pasang keperluan. Untuk memastikan perkara mudah, kami akan menggunakan persekitaran maya Python.
setuptools==69.2.0 wheel twine
Untuk membina pakej kami:
python -m venv env source env/bin/activate # for linux and mac ./env/Scripts/activate # for windows pip install -r requirements.txt
Untuk memasang pakej kami secara tempatan untuk ujian:
python setup.py sdist bdist_wheel
Anda boleh melakukan kerja anda dan mengabaikan folder menggunakan fail .gitignore:
https://github.com/github/gitignore/blob/main/Python.gitignore
Untuk menerbitkan pakej, mula-mula buat fail build.pipeline.yml pada akar projek my-package/ dan lakukannya. Atur letak akan dilakukan dengan twine, pustaka yang kami pasang sebelum ini:
my-package/ ├── my_package/ │ ├── __init__.py │ └── module1.py ├── setup.py ├── build.pipeline.yml ├── requirements.txt ├── .gitignore ├── README.md ├── MANIFEST.in └── LICENSE
Jika anda perlu memasukkan fail bukan Python dengan pemasangan modul anda, anda boleh menggunakan fail MANIFEST.in. Fail ini menentukan fail tambahan yang harus disertakan dalam pengedaran pakej anda.
class Hello: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!"
Kemudian muat naik pakej:
from .module1 import Hello
Buat token akses:
Sebaik sahaja anda mempunyai token anda, pastikan ia selamat, kerana anda memerlukannya untuk memasang pakej anda.
Pada mesin anda, anda boleh memasang pakej peribadi anda menggunakan templat berikut:
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}", } )
Syabas, anda sekarang tahu cara mencipta dan menggunakan pakej peribadi anda sendiri dengan Python pada GitHub.
Pautan repositori Github : https://github.com/ABDELLAH-Hallou/Private-Python-Package-Deployment
Atas ialah kandungan terperinci Cipta dan Keluarkan Pakej Python Peribadi di GitHub. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!