Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cipta dan Keluarkan Pakej Python Peribadi di GitHub

Cipta dan Keluarkan Pakej Python Peribadi di GitHub

Linda Hamilton
Linda Hamiltonasal
2024-10-20 22:18:30989semak imbas

pengenalan

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:

  1. Mencipta pakej Python
  2. Menetapkan pakej ke repositori peribadi (GitHub)
  3. Memasang pakej dalam persekitaran maya (venv)

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.

Create and Release a Private Python Package on GitHub

1. Sediakan Struktur Projek Anda

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:

  • my-package/: Ini ialah direktori akar projek kami. Ia seperti sebuah rumah yang mengandungi semua bilik (fail) yang kita perlukan.
  • my_package/: Subdirektori ini adalah tempat tinggal kod Python sebenar. Ia dinamakan sama dengan pakej kami untuk kejelasan.
    • __init__.py: Fail ini menjadikan Python merawat direktori sebagai pakej. Ia boleh kosong atau boleh melaksanakan kod permulaan untuk pakej.
    • module1.py: Di sinilah kami meletakkan kod utama kami. Anda boleh mempunyai berbilang fail modul bergantung pada kerumitan pakej anda.
  • setup.py: Anggap ini sebagai manual arahan untuk pakej kami. Ia mengandungi metadata tentang pakej kami (seperti nama dan versinya) dan menyenaraikan kebergantungannya. Fail ini penting untuk menjadikan pakej kami boleh dipasang melalui pip.
  • requirements.txt: Fail ini menyenaraikan semua pakej Python luaran yang bergantung kepada projek kami. Ia seperti senarai beli-belah untuk pip, memberitahunya dengan tepat apa yang perlu dipasang untuk menjadikan pakej kami berfungsi.
  • README.md: Ini adalah tikar selamat datang projek kami. Ini biasanya perkara pertama yang dilihat orang apabila mereka melawat repositori GitHub kami, jadi kami menggunakannya untuk menerangkan perkara yang dilakukan oleh pakej kami, cara memasangnya dan cara menggunakannya.
  • .gitignore: Fail ini memberitahu Git fail atau direktori yang hendak diabaikan. Ia berguna untuk memastikan kod yang disusun, fail sementara atau maklumat sensitif di luar kawalan versi.
  • LESEN: Fail ini menentukan cara orang lain boleh menggunakan, mengubah suai atau mengedarkan pakej kami. Ini penting untuk projek sumber terbuka dan membantu melindungi kerja kami.
  • MANIFEST.in: Fail ini digunakan untuk memasukkan fail bukan Python dalam pengedaran pakej kami. Jika kami mempunyai fail data, dokumentasi atau sumber lain yang perlu disertakan, kami menyenaraikannya di sini.
  • build.pipeline.yml: Fail ini mentakrifkan saluran paip Integrasi Berterusan/Penggunaan Berterusan (CI/CD) kami. Ia mengautomasikan tugas seperti menjalankan ujian dan membina pakej apabila kami menolak perubahan pada repositori GitHub kami.

2. Mencipta Kod Pakej

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}!"

3. Mencipta setup.py

Fail setup.py adalah penting untuk membungkus projek kami. Berikut ialah contoh asas:

from .module1 import Hello

4. Mencipta keperluan.txt

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}",
    }
)

5. Membina dan Memasang Pakej Anda

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

6. Menerbitkan Pakej di GitHub dengan tag

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

7. Pasang Pakej

Buat token akses:

  • Pergi ke Tetapan > Tetapan Pembangun > Token akses peribadi (klasik) > Jana token baharu.
  • Pastikan anda menyemak skop write:packages untuk memberikan kebenaran yang diperlukan.

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}",
    }
)

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn