Monday

18-08-2025 Vol 19

Publish a Python Package (part 1)

Publikasikan Paket Python Anda (Bagian 1): Persiapan dan Struktur Dasar

Selamat datang di bagian pertama dari panduan lengkap tentang cara mempublikasikan paket Python Anda ke PyPI (Python Package Index)! Dalam seri ini, kita akan membahas seluruh proses dari awal hingga akhir, memastikan bahwa paket Anda siap untuk dibagikan dengan komunitas Python yang lebih luas. Bagian ini akan fokus pada persiapan awal, struktur direktori yang benar, dan pemilihan lisensi yang tepat.

Mengapa Mempublikasikan Paket Python?

Sebelum kita menyelami detail teknis, mari kita pertimbangkan mengapa Anda mungkin ingin mempublikasikan paket Python Anda:

  1. Berbagi Kode: Cara termudah dan paling efisien untuk membagikan kode yang Anda buat dengan orang lain.
  2. Penggunaan Kembali Kode: Memungkinkan Anda menggunakan kembali kode Anda sendiri di berbagai proyek.
  3. Kontribusi ke Komunitas: Memberikan kembali ke komunitas Python dan membantu orang lain.
  4. Reputasi Profesional: Membangun reputasi Anda sebagai pengembang Python yang kompeten.
  5. Manajemen Dependensi: Mempermudah pengelolaan dependensi proyek Anda.

Persiapan Awal: Langkah-Langkah Penting

Sebelum kita mulai menulis kode atau mengatur direktori, ada beberapa langkah persiapan yang perlu kita lakukan:

1. Pilih Nama Paket yang Unik

Nama paket Anda harus unik dan belum digunakan di PyPI. Ini sangat penting karena akan menjadi identitas paket Anda. Gunakan PyPI untuk memeriksa ketersediaan nama yang Anda inginkan. Pertimbangkan hal berikut saat memilih nama:

  • Singkat dan Mudah Diingat: Hindari nama yang terlalu panjang atau sulit dieja.
  • Deskriptif: Sebaiknya nama tersebut memberikan gambaran tentang apa yang dilakukan paket Anda.
  • Konsisten: Pertimbangkan konvensi penamaan Python (misalnya, menggunakan garis bawah untuk memisahkan kata).

2. Buat Akun TestPyPI dan PyPI

Kita akan menggunakan TestPyPI untuk menguji proses publikasi sebelum benar-benar menerbitkan ke PyPI yang sebenarnya. Ini membantu menghindari kesalahan dan memastikan semuanya berjalan lancar.

  1. TestPyPI: Daftar akun di TestPyPI. Ini adalah lingkungan pengujian untuk PyPI.
  2. PyPI: Daftar akun di PyPI. Ini adalah repositori paket Python utama.

3. Instal Paket yang Diperlukan

Kita akan membutuhkan beberapa paket Python untuk membantu kita dalam proses publikasi. Instal menggunakan pip:


pip install setuptools wheel twine

  • setuptools: Digunakan untuk membangun paket Python.
  • wheel: Format distribusi standar untuk paket Python.
  • twine: Digunakan untuk mengunggah paket ke PyPI dan TestPyPI dengan aman.

Struktur Direktori Paket Python

Struktur direktori yang terorganisir dengan baik sangat penting untuk paket Python yang mudah dipelihara dan didistribusikan. Berikut adalah struktur direktori yang disarankan:

    
    my_package/
    ├── my_package/      # Direktori paket Python sebenarnya
    │   ├── __init__.py  # Membuat direktori ini sebagai paket Python
    │   ├── module1.py   # Modul kode Anda
    │   ├── module2.py   # Modul lainnya
    │   └── ...
    ├── tests/           # Direktori untuk pengujian
    │   ├── __init__.py
    │   ├── test_module1.py
    │   ├── test_module2.py
    │   └── ...
    ├── LICENSE          # Lisensi (misalnya, MIT, Apache 2.0)
    ├── README.md        # File README dengan deskripsi paket
    ├── pyproject.toml   # File konfigurasi untuk build system
    └── setup.py         # (Opsional, lihat penjelasan di bawah)
    
  

Mari kita uraikan setiap bagian:

1. Direktori Utama Paket (my_package/)

Ini adalah direktori akar proyek Anda. Semua file dan direktori lainnya berada di dalamnya.

2. Direktori Paket Python Sebenarnya (my_package/ di dalam direktori utama)

Direktori ini berisi kode Python Anda. Nama direktori ini harus sama dengan nama paket Anda.

  • __init__.py: File kosong ini membuat direktori ini sebagai paket Python. Dalam Python 3.3+, file ini opsional, tetapi disarankan untuk tetap disertakan untuk kompatibilitas mundur. Anda juga dapat menggunakan `__init__.py` untuk mengimpor modul dan fungsi secara langsung dari paket.
  • module1.py, module2.py, dll.: File-file ini berisi kode Python Anda. Anda dapat mengatur kode Anda ke dalam modul-modul yang berbeda untuk keterbacaan dan pemeliharaan yang lebih baik.

3. Direktori Pengujian (tests/)

Direktori ini berisi pengujian unit untuk kode Anda. Ini sangat penting untuk memastikan bahwa kode Anda berfungsi dengan benar dan tetap berfungsi seperti yang diharapkan saat Anda membuat perubahan.

  • __init__.py: Sama seperti di direktori paket, file ini membuat direktori ini sebagai paket Python yang berisi pengujian.
  • test_module1.py, test_module2.py, dll.: File-file ini berisi pengujian unit untuk modul yang sesuai di direktori paket Anda. Setiap file harus menguji fungsionalitas yang berbeda dari modul yang sesuai.

4. File Lisensi (LICENSE)

File ini berisi lisensi untuk paket Anda. Memilih lisensi yang tepat sangat penting karena menentukan bagaimana orang lain dapat menggunakan dan mendistribusikan kode Anda. Kita akan membahas lisensi lebih detail nanti.

5. File README (README.md)

File ini berisi deskripsi paket Anda. Ini adalah hal pertama yang akan dilihat orang ketika mereka mengunjungi halaman paket Anda di PyPI. File README harus menjelaskan apa yang dilakukan paket Anda, cara menginstalnya, dan cara menggunakannya. Gunakan Markdown untuk memformat file README Anda.

6. File Konfigurasi Build (pyproject.toml)

File ini adalah file konfigurasi untuk build system. Ini mendefinisikan dependensi build dan konfigurasi build lainnya. Ini adalah cara modern untuk mengonfigurasi build Python, menggantikan `setup.py` dalam banyak kasus.

7. File Setup (setup.py) (Opsional, tapi sering digunakan)

Secara historis, file ini digunakan untuk mendefinisikan metadata paket, dependensi, dan entry point. Meskipun `pyproject.toml` semakin populer, `setup.py` masih banyak digunakan, terutama untuk proyek-proyek yang lebih tua atau yang membutuhkan konfigurasi yang lebih kompleks. Anda dapat menggunakan keduanya, tetapi disarankan untuk menggunakan `pyproject.toml` sebagai cara utama untuk mengonfigurasi build Anda.

Contoh Kode: __init__.py, module1.py, dan test_module1.py

Mari kita lihat contoh kode untuk beberapa file dalam struktur direktori kita.

my_package/__init__.py

    
    # my_package/__init__.py

    # Anda dapat menggunakan ini untuk mengimpor modul dan fungsi secara langsung dari paket
    # contoh:
    # from .module1 import my_function

    __version__ = "0.1.0" # Pastikan untuk memperbarui versi ini!
    
  

my_package/module1.py

    
    # my_package/module1.py

    def greet(name):
      """Mengembalikan pesan sapaan."""
      return f"Halo, {name}!"
    
  

tests/test_module1.py

    
    # tests/test_module1.py

    import unittest
    from my_package import module1

    class TestModule1(unittest.TestCase):
      def test_greet(self):
        self.assertEqual(module1.greet("Dunia"), "Halo, Dunia!")

    if __name__ == '__main__':
      unittest.main()
    
  

Memilih Lisensi yang Tepat

Memilih lisensi yang tepat adalah keputusan penting karena menentukan bagaimana orang lain dapat menggunakan dan mendistribusikan kode Anda. Berikut adalah beberapa lisensi open-source yang umum:

  • MIT License: Lisensi permisif yang memungkinkan siapa pun menggunakan, memodifikasi, dan mendistribusikan kode Anda untuk tujuan apa pun, bahkan komersial. Persyaratan utamanya adalah menyertakan pemberitahuan hak cipta dan lisensi dalam kode Anda.
  • Apache 2.0 License: Lisensi permisif lainnya yang serupa dengan MIT, tetapi juga mencakup ketentuan tentang paten.
  • GNU General Public License (GPL): Lisensi copyleft yang mengharuskan setiap orang yang mendistribusikan kode Anda (atau kode turunan) di bawah GPL untuk merilis kode sumbernya di bawah GPL juga.
  • BSD License: Keluarga lisensi permisif yang mirip dengan MIT.

Lisensi mana yang harus Anda pilih?

  • Jika Anda ingin fleksibilitas maksimum: MIT atau Apache 2.0.
  • Jika Anda ingin memastikan bahwa setiap orang yang menggunakan kode Anda membagikan perubahannya: GPL.

Cara menambahkan lisensi ke paket Anda:

  1. Buat file bernama LICENSE di direktori akar proyek Anda.
  2. Salin teks lisensi ke dalam file LICENSE.
  3. Sebutkan lisensi di file pyproject.toml atau setup.py Anda.

Konfigurasi Build dengan pyproject.toml

pyproject.toml adalah file konfigurasi build modern yang digunakan untuk mendefinisikan bagaimana paket Python Anda dibangun. Ini menggantikan banyak fungsi yang sebelumnya ditangani oleh setup.py.

Berikut adalah contoh pyproject.toml:

    
    [build-system]
    requires = ["setuptools>=61.0", "wheel"]
    build-backend = "setuptools.build_meta"

    [project]
    name = "my_package"
    version = "0.1.0"
    description = "Paket Python saya yang luar biasa"
    readme = "README.md"
    authors = [{ name = "Nama Anda", email = "email@example.com" }]
    license = { file = "LICENSE" }
    keywords = ["python", "paket", "contoh"]
    classifiers = [
        "Development Status :: 3 - Alpha",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: MIT License",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
        "Programming Language :: Python :: 3.10",
        "Programming Language :: Python :: 3.11",
    ]
    dependencies = [
        "requests >= 2.28.0", # Contoh dependensi
    ]

    [project.urls]
    "Homepage" = "https://github.com/username/my_package"
    "Bug Tracker" = "https://github.com/username/my_package/issues"
    
  

Mari kita uraikan setiap bagian:

  • [build-system]: Bagian ini mendefinisikan dependensi build dan build backend.
  • requires: Daftar paket yang diperlukan untuk membangun paket Anda (setuptools dan wheel selalu diperlukan).
  • build-backend: Build backend yang digunakan (dalam hal ini, setuptools.build_meta).
  • [project]: Bagian ini mendefinisikan metadata proyek.
  • name: Nama paket Anda (harus unik di PyPI).
  • version: Versi paket Anda. Gunakan skema versi semantic (SemVer).
  • description: Deskripsi singkat tentang paket Anda.
  • readme: Jalur ke file README Anda.
  • authors: Daftar penulis paket.
  • license: Informasi lisensi. Anda dapat menentukan nama lisensi atau jalur ke file lisensi.
  • keywords: Daftar kata kunci yang terkait dengan paket Anda.
  • classifiers: Daftar pengklasifikasi yang menggambarkan paket Anda (misalnya, bahasa pemrograman, lisensi, status pengembangan). Lihat daftar lengkap pengklasifikasi.
  • dependencies: Daftar dependensi yang diperlukan oleh paket Anda untuk dijalankan. Gunakan penentu versi untuk menentukan rentang versi yang kompatibel (misalnya, requests >= 2.28.0).
  • [project.urls]: Bagian ini mendefinisikan URL yang terkait dengan paket Anda (misalnya, beranda, pelacak bug).

Menggunakan setup.py (Alternatif atau Tambahan)

Meskipun pyproject.toml adalah cara yang disukai, Anda mungkin masih menggunakan setup.py, terutama jika Anda memiliki proyek yang lebih tua atau membutuhkan logika build yang lebih kompleks. Berikut adalah contoh setup.py yang sesuai dengan pyproject.toml di atas:

    
    # setup.py

    from setuptools import setup, find_packages

    with open("README.md", "r", encoding="utf-8") as fh:
        long_description = fh.read()

    setup(
        name="my_package",
        version="0.1.0",
        author="Nama Anda",
        author_email="email@example.com",
        description="Paket Python saya yang luar biasa",
        long_description=long_description,
        long_description_content_type="text/markdown",
        url="https://github.com/username/my_package",
        project_urls={
            "Bug Tracker": "https://github.com/username/my_package/issues",
        },
        license="MIT",
        packages=find_packages(),
        classifiers=[
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.7",
            "Programming Language :: Python :: 3.8",
            "Programming Language :: Python :: 3.9",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
        ],
        python_requires=">=3.7",
        install_requires=[
            "requests >= 2.28.0", # Contoh dependensi
        ],
    )
    
  

Mari kita uraikan beberapa bagian penting:

  • name: Nama paket Anda.
  • version: Versi paket Anda.
  • author dan author_email: Informasi tentang penulis.
  • description: Deskripsi singkat.
  • long_description: Deskripsi yang lebih rinci (biasanya diambil dari file README).
  • long_description_content_type: Jenis konten untuk deskripsi panjang (misalnya, text/markdown).
  • url: URL beranda proyek.
  • project_urls: Kamus URL tambahan.
  • license: Lisensi.
  • packages=find_packages(): Secara otomatis menemukan semua paket Python dalam proyek Anda.
  • classifiers: Daftar pengklasifikasi.
  • python_requires: Versi Python minimum yang diperlukan.
  • install_requires: Daftar dependensi.

Praktik Terbaik SEO untuk Deskripsi Paket

Agar paket Anda lebih mudah ditemukan di PyPI dan mesin pencari, pertimbangkan praktik terbaik SEO berikut saat menulis deskripsi dan README:

  • Gunakan Kata Kunci yang Relevan: Identifikasi kata kunci yang akan digunakan orang untuk mencari paket seperti milik Anda. Sertakan kata kunci ini dalam deskripsi, README, dan kata kunci paket Anda.
  • Tulis Deskripsi yang Jelas dan Ringkas: Deskripsi Anda harus jelas, ringkas, dan akurat menggambarkan apa yang dilakukan paket Anda.
  • Gunakan Judul dan Subjudul: Gunakan judul dan subjudul yang deskriptif dalam README Anda untuk memecah teks dan membuatnya lebih mudah dibaca.
  • Format dengan Markdown: Gunakan Markdown untuk memformat README Anda. Ini membuatnya lebih mudah dibaca dan membuatnya terlihat lebih profesional.
  • Tautkan ke Dokumentasi dan Contoh: Jika Anda memiliki dokumentasi atau contoh, tautkan ke sana dari README Anda.

Ringkasan

Dalam bagian pertama ini, kita telah membahas persiapan awal untuk menerbitkan paket Python Anda, termasuk memilih nama paket yang unik, membuat akun TestPyPI dan PyPI, menginstal paket yang diperlukan, dan mengatur struktur direktori yang benar. Kita juga membahas pemilihan lisensi yang tepat dan menulis deskripsi paket yang dioptimalkan untuk SEO. Di bagian selanjutnya, kita akan membahas cara membangun dan mengunggah paket Anda ke TestPyPI dan PyPI.

Tetaplah bersama kami untuk bagian 2, di mana kita akan mempraktikkan semuanya dan membuat paket Python Anda tersedia untuk dunia!

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *