{"id":61206,"date":"2026-02-04T08:26:00","date_gmt":"2026-02-04T01:26:00","guid":{"rendered":"https:\/\/www.rumahweb.com\/journal\/?p=61206"},"modified":"2026-02-13T17:14:41","modified_gmt":"2026-02-13T10:14:41","slug":"belajar-python-part-9","status":"publish","type":"post","link":"https:\/\/www.rumahweb.com\/journal\/belajar-python-part-9\/","title":{"rendered":"Belajar Python Part 9: Packaging dan Distribusi Pada Python"},"content":{"rendered":"\n<p>Pada seri Belajar Python <a href=\"https:\/\/www.rumahweb.com\/journal\/belajar-python-part-8\/\" target=\"_blank\" rel=\"noopener\" title=\"\">part 8<\/a>, kita telah mempelajari cara membuat aplikasi Python sederhana. Namun, sebuah aplikasi tidak hanya berhenti pada tahap pembuatan saja. Agar aplikasi tersebut dapat digunakan atau dibagikan kepada orang lain, diperlukan proses <em>packaging<\/em> dan distribusi yang tepat.<\/p>\n\n\n\n<p>Dalam seri belajar Python part 9 ini, kita akan membahas konsep <em>packaging <\/em>dan distribusi pada aplikasi Python, mulai dari tujuan, manfaatnya, hingga bagaimana cara mengemas aplikasi Python agar siap dibagikan dan dijalankan di lingkungan lain. Dengan memahami materi ini, Anda selangkah lebih maju dalam mengembangkan aplikasi Python yang rapi, terstruktur, dan siap digunakan oleh pengguna lain.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Apa itu <em>Packaging <\/em>dalam Python?<\/strong><\/h2>\n\n\n\n<p><em>Packaging <\/em>dalam Python adalah proses mengemas kode program beserta seluruh dependensi yang dibutuhkan ke dalam satu paket yang siap diinstal. Dengan proses ini, pengguna aplikasi tidak perlu lagi melakukan instalasi <em>library <\/em>satu per satu atau mengatur <em>environment <\/em>secara manual.<\/p>\n\n\n\n<p>Melalui <em>packaging<\/em>, aplikasi Python dapat didistribusikan dengan lebih rapi, konsisten, dan minim kesalahan. Selain memudahkan proses instalasi, packaging juga membantu memastikan aplikasi dapat berjalan dengan baik di berbagai lingkungan sistem yang berbeda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Struktur Proyek Python<\/strong><\/h2>\n\n\n\n<p>Sebelum melakukan <em>packaging<\/em>, hal yang penting dilakukan yaitu memastikan folder aplikasi telah terstruktur dengan baik. Struktur yang baik mencakup penamaan file yang jelas dan konsisten serta penempatan file yang terorganisir. Contoh struktur proyek Python yang umum digunakan adalah sebagai berikut:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png\"><img loading=\"lazy\" decoding=\"async\" width=\"345\" height=\"213\" src=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png\" alt=\"struktur folder python - belajar python\" class=\"wp-image-61250\" srcset=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png 345w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77-300x185.png 300w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77-270x167.png 270w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Keterangan<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>myapp\/: folder utama proyek<\/li>\n\n\n\n<li>init.py: penanda package Python<\/li>\n\n\n\n<li>tests\/: berisi file pengujian<\/li>\n\n\n\n<li>README.md: dokumentasi aplikasi<\/li>\n\n\n\n<li>requirements.txt: daftar dependensi<\/li>\n\n\n\n<li>setup.py: konfigurasi <em>packaging<\/em><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Membuat File requirements.txt<\/strong><\/h2>\n\n\n\n<p>File <code>requirements.txt<\/code> penting pada tahap deployment aplikasi, karena dengan adanya requirements yang tepat saat distribusi aplikasi menggunakan <em>environment <\/em>yang konsisten serta digunakan untuk mendefinisikan <em>library <\/em>apa saja yang dibutuhkan aplikasi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Contoh isi requirements.txt<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<ul class=\"wp-block-list\">\n<li>Flask&gt;=2.3.0<\/li>\n\n\n\n<li>requests&gt;=2.28.0<\/li>\n\n\n\n<li>pandas&gt;=1.5.3<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Generate otomatis dari environment<\/strong><\/h3>\n\n\n\n<p>Jika Anda ingin melakukan generate otomatis file <code>requirements.txt<\/code> dari semua <em>library <\/em>Python yang terinstall di <em>environment <\/em>Anda saat ini, dapat menjalankan perintah berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip freeze &gt; requirements.txt<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Install dependensi<\/strong><\/h3>\n\n\n\n<p>Anda juga dapat menginstal semua library Python yang ada di file requirements.txt dengan menjalankan perintah berikut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install -r requirements.txt<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Membuat File setup.py<\/strong><\/h2>\n\n\n\n<p>File <code>setup.py<\/code> perlu dibuat dengan tujuan sebagai konfigurasi utama saat proses <em>packaging<\/em>. Berikut contoh sederhana <code>setup.py<\/code> yang dapat dibuat:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from setuptools import setup, find_packages\n\nsetup(\n\n&nbsp;&nbsp;&nbsp;&nbsp;name=\"myapp\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;version=\"1.0.0\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;packages=find_packages(),\n\n&nbsp;&nbsp;&nbsp;&nbsp;python_requires=\"&gt;=3.7\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;install_requires=&#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"Flask&gt;=2.3.0\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"requests&gt;=2.28.0\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;],\n\n)<\/code><\/pre>\n\n\n\n<p><strong>Keterangan parameter:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>name<\/strong>: nama package<\/li>\n\n\n\n<li><strong>version<\/strong>: versi aplikasi<\/li>\n\n\n\n<li><strong>packages<\/strong>: package yang akan disertakan<\/li>\n\n\n\n<li><strong>install_requires<\/strong>: dependensi aplikasi<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Build dan Instalasi Package<\/strong><\/h2>\n\n\n\n<p>Selanjutnya, kita akan membuat package yang akan membungkus aplikasi sebelum didistribusikan nantinya, dengan tahapan berikut.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Instal tools yang dibutuhkan<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install setuptools wheel<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Build package<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>python setup.py sdist bdist_wheel<\/code><\/pre>\n\n\n\n<p>Hasil build akan tersimpan pada folder dist\/.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Instal package secara lokal<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install .<\/code><\/pre>\n\n\n\n<p><strong>Note<\/strong>: Jangan lupa menyertakan tanda titik (.) untuk mendefinisikan direktori saat ini.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Distribusi Package ke PyPI<\/strong><\/h2>\n\n\n\n<p>PyPI (<em>Python Package Index<\/em>) adalah <em>repository <\/em>resmi untuk <em>package <\/em>Python yang digunakan oleh para <em>developer <\/em>untuk mempublikasikan dan berbagi <em>library <\/em>atau aplikasi Python. Dengan mengunggah <em>package <\/em>ke PyPI, pengguna lain dapat menginstalnya dengan mudah hanya melalui perintah <code>pip install nama-package<\/code>, sama seperti saat menginstal package populer seperti Flask, requests, atau pandas.<\/p>\n\n\n\n<p>Berikut adalah langkah-langkah pembuatan dan publikasi package Python ke PyPI:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1. Buat akun di PyPI<\/h3>\n\n\n\n<p>Untuk membuat akun di PyPI, kunjungi website resminya di <a href=\"https:\/\/pypi.org\">https:\/\/pypi.org<\/a> dan klik tombol &#8220;Register&#8221; atau &#8220;Sign Up&#8221; di pojok kanan atas halaman. Selanjutnya, Anda dapat menyelesaikan langkah pendaftaran yang dibutuhkan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2. Jalankan Instal twine<\/h3>\n\n\n\n<p>Selanjutnya, kembali ke terminal Python untuk melanjutkan pembuatan package di PyPi. Berikut contoh perntahnya:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install twine<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3. Upload package<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>twine upload dist\/*<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4. Install package<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install myapp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Alternatif Distribusi Aplikasi<\/h2>\n\n\n\n<p>Selain PyPI, terdapat beberapa metode lain untuk mendistribusikan aplikasi Python:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. PyInstaller<\/h3>\n\n\n\n<p>PyInstaller digunakan untuk membuat file executable (.exe) sehingga aplikasi dapat dijalankan tanpa Python terinstal. Metode ini cocok untuk mendistribusikan aplikasi desktop ke <em>end-user <\/em>non-teknis yang tidak memiliki Python di sistemnya, karena semua dependencies dan interpreter Python sudah di bundle menjadi satu file executable yang siap pakai seperti aplikasi lain pada umumnya. <\/p>\n\n\n\n<p>Perintah PyInstaller yang digunakan sebagai berikut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pyinstaller --onefile myapp\/main.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Docker<\/h3>\n\n\n\n<p>Docker sebagai distribusi aplikasi yang cocok untuk aplikasi yang membutuhkan environment konsisten. Misalnya seperti aplikasi microservices, web applications atau aplikasi yang membutuhkan deploy ke server atau cloud. Perintah yang dapat digunakan sebagai berikut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -t myapp:1.0 .<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run myapp:1.0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Contoh Pembuatan Package Python Sederhana<\/h2>\n\n\n\n<p>Untuk memperjelas konsep <em>packaging<\/em> di seri belajar Python, berikut contoh pembuatan <em>package <\/em>sederhana dengan aplikasi kalkulator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Struktur Proyek<\/h3>\n\n\n\n<p>Pada contoh pembuatan aplikasi kalkulator sederhana, kita akan membuat struktur folder seperti berikut:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png\"><img loading=\"lazy\" decoding=\"async\" width=\"345\" height=\"213\" src=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png\" alt=\"contoh struktur folder sederhana\" class=\"wp-image-61251\" srcset=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77.png 345w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77-300x185.png 300w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2026\/01\/image-77-270x167.png 270w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2. File calculator\/operations.py<\/h3>\n\n\n\n<p>Selanjutnya, kita akan membuat file yang memuat fungsi atau rumus yang akan dijalankan pada operasi kalkulator.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"\"\"Module untuk operasi matematika dasar\"\"\"\n\ndef tambah(a, b):\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"\"\"Menambahkan dua angka\"\"\"\n\n&nbsp;&nbsp;&nbsp;&nbsp;return a + b\n\ndef kurang(a, b):\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"\"\"Mengurangi dua angka\"\"\"\n\n&nbsp;&nbsp;&nbsp;&nbsp;return a - b\n\ndef kali(a, b):\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"\"\"Mengalikan dua angka\"\"\"\n\n&nbsp;&nbsp;&nbsp;&nbsp;return a * b\n\ndef bagi(a, b):\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"\"\"Membagi dua angka\"\"\"\n\n&nbsp;&nbsp;&nbsp;&nbsp;if b == 0:\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise ValueError(\"Tidak dapat membagi dengan nol\")\n\n&nbsp;&nbsp;&nbsp;&nbsp;return a \/ b<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. File c<\/strong>a<strong>lculator\/init.py<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\"\"\"Calculator Package\"\"\"\n\n__version__ = \"1.0.0\"\n\nfrom .operations import tambah, kurang, kali, bagi\n\n__all__ = &#91;'tambah', 'kurang', 'kali', 'bagi']<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. File setup.py<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from setuptools import setup, find_packages\n\nsetup(\n\n&nbsp;&nbsp;&nbsp;&nbsp;name=\"calculator-app\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;version=\"1.0.0\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;author=\"Nama Anda\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;author_email=\"email@example.com\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;description=\"Package kalkulator sederhana\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;packages=find_packages(),\n\n&nbsp;&nbsp;&nbsp;&nbsp;python_requires=\"&gt;=3.7\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;classifiers=&#91;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"Programming Language :: Python :: 3\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"License :: OSI Approved :: MIT License\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;],\n\n)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Build dan Install<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Build package\n\npython setup.py sdist bdist_wheel\n\n# Install lokal\n\npip install .\n\n# Test import\n\npython -c \"from calculator import tambah; print(tambah(5, 3))\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Distribusi untuk Berbagai Platform<\/h2>\n\n\n\n<p>Berikut adalah beberapa distribusi untuk berbagi platform di aplikasi Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Windows<\/h3>\n\n\n\n<p>Menggunakan PyInstaller<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pyinstaller --onefile --windowed myapp.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Linux<\/h3>\n\n\n\n<p>Membuat .deb package<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python setup.py --command-packages=stdeb.command bdist_deb<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">macOS<\/h3>\n\n\n\n<p>Menggunakan py2app<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python setup.py py2app<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Penutup<\/strong><\/h2>\n\n\n\n<p><em>Packaging <\/em>dan distribusi dalam Python merupakan skill yang perlu dikuasai, sehingga Anda tidak hanya bisa membuat aplikasi Python namun juga dapat membagikan aplikasi Python secara profesional. <\/p>\n\n\n\n<p>Dalam sesi belajar Python Part 10 nanti, kita akan melanjutkan pembahasan dengan topik yang lebih lanjut, yaitu <em>testing <\/em>dan <em>debugging <\/em>aplikasi Python untuk memastikan aplikasi berjalan dengan stabil. <\/p>\n\n\n\n<p>Tetap ikuti seri belajar Python agar Anda semakin mahir mengembangkan aplikasi berbasis Python secara profesional. Selamat mencoba \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pada seri Belajar Python part 8, kita telah mempelajari cara membuat aplikasi Python sederhana. Namun, sebuah aplikasi tidak hanya berhenti pada tahap pembuatan saja. Agar aplikasi tersebut dapat digunakan atau dibagikan kepada orang lain, diperlukan proses packaging dan distribusi yang tepat. Dalam seri belajar Python part 9 ini, kita akan membahas konsep packaging dan distribusi [&hellip;]<\/p>\n","protected":false},"author":354,"featured_media":61338,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[2483,1176,2485],"class_list":{"0":"post-61206","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-web-programming","8":"tag-belajar-python","9":"tag-python","10":"tag-python-dasar"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts\/61206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/users\/354"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/comments?post=61206"}],"version-history":[{"count":0,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts\/61206\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/media\/61338"}],"wp:attachment":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/media?parent=61206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/categories?post=61206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/tags?post=61206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}