Monday

18-08-2025 Vol 19

Adding Version Information to a PyInstaller Onefile Executable

Menambahkan Informasi Versi ke File Eksekusi Tunggal PyInstaller: Panduan Lengkap

Ketika Anda mendistribusikan aplikasi Python Anda yang diubah menjadi file eksekusi tunggal (onefile executable) menggunakan PyInstaller, Anda mungkin ingin menyertakan informasi versi. Hal ini memungkinkan pengguna untuk dengan mudah mengidentifikasi versi aplikasi yang mereka gunakan dan membantu Anda dalam melacak rilis dan masalah debugging. Artikel ini memberikan panduan langkah demi langkah tentang cara menambahkan informasi versi ke file eksekusi tunggal PyInstaller, memastikan aplikasi Anda terorganisir dengan baik dan mudah dikelola.

Mengapa Informasi Versi Penting?

Sebelum kita menyelam ke dalam detail teknis, mari kita pahami mengapa informasi versi penting:

  1. Identifikasi Aplikasi: Informasi versi memungkinkan pengguna untuk dengan cepat mengidentifikasi versi aplikasi yang mereka gunakan. Ini sangat berguna ketika pengguna melaporkan bug atau meminta dukungan.
  2. Manajemen Rilis: Informasi versi membantu Anda melacak rilis yang berbeda dari aplikasi Anda. Ini membantu Anda mengelola pembaruan, perbaikan bug, dan fitur baru.
  3. Debugging: Saat debugging masalah, mengetahui versi aplikasi yang tepat yang dijalankan pengguna sangat penting. Ini membantu Anda mereplikasi masalah dan menemukan solusinya.
  4. Kepatuhan Hukum: Dalam beberapa kasus, menyertakan informasi versi diperlukan untuk kepatuhan hukum atau lisensi.
  5. Pengalaman Pengguna: Menampilkan informasi versi di aplikasi Anda memberikan pengalaman pengguna yang lebih profesional dan terpoles.

Kerangka Kerja Artikel

Artikel ini akan membahas aspek-aspek berikut dalam menambahkan informasi versi ke file eksekusi tunggal PyInstaller:

  1. Prasyarat: Alat dan pustaka yang diperlukan.
  2. Membuat File Informasi Versi: Membuat file .rc (resource script) yang berisi informasi versi.
  3. Memodifikasi File Spesifikasi PyInstaller: Mengedit file .spec untuk memasukkan file informasi versi.
  4. Membangun File Eksekusi: Menggunakan PyInstaller untuk membuat file eksekusi tunggal dengan informasi versi.
  5. Memverifikasi Informasi Versi: Memeriksa bahwa informasi versi ditambahkan dengan benar ke file eksekusi.
  6. Kasus Tingkat Lanjut: Menangani informasi versi dinamis, mengotomatiskan proses, dan mengatasi masalah umum.
  7. Praktik Terbaik: Tips dan trik untuk mengelola informasi versi secara efektif.

1. Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki alat dan pustaka berikut yang terinstal:

  • Python: Python 3.6 atau lebih tinggi disarankan. Anda dapat mengunduh Python dari situs web Python.
  • PyInstaller: Instal PyInstaller menggunakan pip:
pip install pyinstaller
  • Resource Compiler (opsional): Beberapa sistem operasi memerlukan resource compiler untuk mengolah file .rc.
    • Windows: Anda dapat menggunakan Microsoft Visual C++ (bagian dari Visual Studio) atau MinGW.
    • macOS: macOS biasanya memiliki resource compiler yang terinstal secara default.
    • Linux: Anda mungkin perlu menginstal windres dari paket binutils:
sudo apt-get install binutils

2. Membuat File Informasi Versi (.rc)

File informasi versi adalah file teks yang berisi metadata tentang aplikasi Anda, seperti nama produk, deskripsi, hak cipta, dan nomor versi. Pada Windows, file ini biasanya memiliki ekstensi .rc (resource script).

Berikut adalah contoh file version.rc:

#include "windows.h"

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,0
 PRODUCTVERSION 1,0,0,0
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
 FILEFLAGS VS_FF_DEBUG
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_APP
 FILESUBTYPE VFT_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName", "Your Company Name"
            VALUE "FileDescription", "Your Application Description"
            VALUE "FileVersion", "1.0.0"
            VALUE "InternalName", "YourAppName"
            VALUE "LegalCopyright", "Copyright Ā© 2023 Your Company Name"
            VALUE "OriginalFilename", "YourAppName.exe"
            VALUE "ProductName", "Your Application Name"
            VALUE "ProductVersion", "1.0.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END

Mari kita uraikan komponen utama dari file .rc:

  • #include "windows.h": Menyertakan header Windows yang diperlukan.
  • VS_VERSION_INFO VERSIONINFO: Mendefinisikan blok informasi versi.
  • FILEVERSION dan PRODUCTVERSION: Menentukan nomor versi dalam format major,minor,build,revision.
  • FILEFLAGS: Menentukan bendera yang menunjukkan apakah itu adalah build debug atau release.
  • FILEOS dan FILETYPE: Menentukan sistem operasi dan jenis file.
  • StringFileInfo: Berisi string yang dapat dibaca manusia seperti nama perusahaan, deskripsi file, dan informasi hak cipta.
  • VarFileInfo: Berisi informasi tentang bahasa dan codepage yang digunakan.

Pastikan untuk mengganti nilai-nilai berikut dengan informasi yang sesuai untuk aplikasi Anda:

  • CompanyName
  • FileDescription
  • FileVersion
  • InternalName
  • LegalCopyright
  • OriginalFilename
  • ProductName
  • ProductVersion

Simpan file ini dengan nama version.rc di direktori proyek Anda.

3. Memodifikasi File Spesifikasi PyInstaller (.spec)

File spesifikasi PyInstaller (.spec) berisi instruksi tentang cara membangun aplikasi Anda. Anda perlu memodifikasi file .spec untuk memasukkan file informasi versi. Jika Anda belum memiliki file .spec, Anda dapat membuatnya menggunakan PyInstaller:

pyinstaller --onefile your_script.py

Ini akan menghasilkan file bernama your_script.spec. Buka file .spec di editor teks dan tambahkan kode berikut untuk memasukkan file version.rc:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['your_script.py'],
             pathex=['.'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='YourAppName',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          version='version.rc' # Tambahkan baris ini
          )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='YourAppName')

Perhatikan baris version='version.rc'. Baris ini memberi tahu PyInstaller untuk memasukkan file version.rc ke dalam file eksekusi. Pastikan untuk mengganti YourAppName dengan nama yang diinginkan untuk file eksekusi Anda.

4. Membangun File Eksekusi

Setelah Anda memodifikasi file .spec, Anda dapat menggunakan PyInstaller untuk membangun file eksekusi:

pyinstaller your_script.spec

Ini akan membuat direktori dist yang berisi file eksekusi (YourAppName.exe). File eksekusi sekarang harus berisi informasi versi.

5. Memverifikasi Informasi Versi

Untuk memverifikasi bahwa informasi versi ditambahkan dengan benar, ikuti langkah-langkah ini:

  1. Windows:
    • Klik kanan pada file YourAppName.exe di direktori dist.
    • Pilih “Properties”.
    • Klik pada tab “Details”.
    • Anda akan melihat informasi versi yang Anda tentukan dalam file version.rc.
  2. macOS:
    • Sayangnya, menambahkan informasi versi dengan cara ini tidak akan langsung terlihat di properti file di macOS. Anda perlu menggunakan alat atau script khusus untuk membaca informasi versi dari file eksekusi.
  3. Linux:
    • Mirip dengan macOS, properti file standar di Linux tidak akan menampilkan informasi versi yang ditambahkan. Alat atau script khusus diperlukan untuk mengekstrak informasi ini.

Untuk macOS dan Linux, Anda mungkin perlu menggunakan pustaka pihak ketiga atau alat baris perintah untuk membaca informasi versi dari file eksekusi. Contohnya termasuk menggunakan perintah seperti strings untuk mencari string yang sesuai di dalam file, atau menggunakan pustaka Python yang dirancang untuk mengurai informasi versi PE (Portable Executable).

6. Kasus Tingkat Lanjut

Bagian ini membahas kasus-kasus tingkat lanjut seperti menangani informasi versi dinamis, mengotomatiskan proses, dan mengatasi masalah umum.

6.1. Informasi Versi Dinamis

Dalam beberapa kasus, Anda mungkin perlu menghasilkan informasi versi secara dinamis berdasarkan sistem kontrol versi Anda (misalnya, Git) atau proses build. Anda dapat menggunakan script Python untuk menghasilkan file version.rc pada waktu build.

Berikut adalah contoh cara mendapatkan nomor versi dari Git menggunakan Python:

import subprocess

def get_git_version():
    try:
        process = subprocess.Popen(['git', 'describe', '--tags'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.communicate()
        if stderr:
            return "0.0.0" # Kembalikan default jika git tidak tersedia atau terjadi kesalahan
        version = stdout.decode('utf-8').strip()
        return version
    except FileNotFoundError:
        return "0.0.0" # Kembalikan default jika git tidak ditemukan

if __name__ == '__main__':
    version = get_git_version()
    print(f"Versi Git: {version}")

Anda kemudian dapat menggunakan script ini untuk menghasilkan file version.rc dengan nomor versi dinamis. Ini dapat diintegrasikan ke dalam proses build Anda, memastikan bahwa informasi versi selalu up-to-date.

Contoh penggunaan di dalam file .spec untuk menghasilkan version.rc sebelum PyInstaller dijalankan:

# your_script.spec
import subprocess
import os

# Jalankan skrip Python untuk menghasilkan version.rc
subprocess.run(['python', 'generate_version_rc.py'])

block_cipher = None

a = Analysis(['your_script.py'],
             pathex=['.'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='YourAppName',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          version='version.rc' # Menggunakan file yang dihasilkan
          )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='YourAppName')

Pastikan Anda membuat file generate_version_rc.py yang sesuai untuk menghasilkan file version.rc dengan informasi versi dinamis Anda.

6.2. Mengotomatiskan Proses

Untuk proyek yang lebih besar, Anda dapat mengotomatiskan proses menambahkan informasi versi menggunakan script build atau alat otomasi. Ini memastikan konsistensi dan mengurangi risiko kesalahan manusia. Anda dapat menggunakan alat seperti Make, script Bash, atau platform CI/CD (Continuous Integration/Continuous Deployment) untuk mengotomatiskan proses tersebut.

Contoh script bash sederhana untuk mengotomatiskan prosesnya:

#!/bin/bash

# Dapatkan nomor versi dari Git
VERSION=$(git describe --tags)

# Hasilkan file version.rc
cat <<EOF > version.rc
#include "windows.h"

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,0
 PRODUCTVERSION 1,0,0,0
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
 FILEFLAGS VS_FF_DEBUG
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_APP
 FILESUBTYPE VFT_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName", "Your Company Name"
            VALUE "FileDescription", "Your Application Description"
            VALUE "FileVersion", "${VERSION}"
            VALUE "InternalName", "YourAppName"
            VALUE "LegalCopyright", "Copyright Ā© 2023 Your Company Name"
            VALUE "OriginalFilename", "YourAppName.exe"
            VALUE "ProductName", "Your Application Name"
            VALUE "ProductVersion", "${VERSION}"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END
EOF

# Bangun aplikasi menggunakan PyInstaller
pyinstaller your_script.spec

echo "Build selesai dengan versi: ${VERSION}"

6.3. Mengatasi Masalah Umum

Berikut adalah beberapa masalah umum yang mungkin Anda temui dan cara mengatasinya:

  • Informasi Versi Tidak Muncul:
    • Pastikan file .rc Anda diformat dengan benar dan berisi informasi yang benar.
    • Pastikan Anda telah menambahkan baris version='version.rc' yang benar ke file .spec Anda.
    • Pastikan Anda membangun file eksekusi menggunakan file .spec yang dimodifikasi.
  • Kesalahan Kompilasi Resource:
    • Pastikan Anda memiliki resource compiler yang terinstal dan dikonfigurasi dengan benar.
    • Periksa pesan kesalahan untuk petunjuk tentang masalahnya.
  • Masalah Kompatibilitas:
    • Beberapa versi PyInstaller mungkin memiliki masalah kompatibilitas dengan versi Windows atau macOS tertentu. Coba gunakan versi PyInstaller yang berbeda atau perbarui sistem operasi Anda.
  • Masalah Jalur:
    • Pastikan jalur ke file version.rc di dalam file .spec sudah benar. Jalur relatif terhadap direktori proyek adalah yang terbaik.

7. Praktik Terbaik

Berikut adalah beberapa praktik terbaik untuk mengelola informasi versi secara efektif:

  • Gunakan Sistem Penamaan Versi yang Konsisten:
    • Terapkan sistem penamaan versi yang konsisten di seluruh proyek Anda. Ini memudahkan untuk melacak rilis dan mengidentifikasi masalah. Konvensi penamaan versi semantik (SemVer) adalah pilihan yang populer.
  • Sertakan Informasi Versi di Aplikasi Anda:
    • Tampilkan informasi versi di aplikasi Anda, misalnya di layar tentang atau di baris perintah. Ini memudahkan pengguna untuk menentukan versi aplikasi yang mereka gunakan.
  • Otomatiskan Proses:
    • Otomatiskan proses menambahkan informasi versi ke file eksekusi Anda. Ini mengurangi risiko kesalahan dan memastikan konsistensi.
  • Gunakan Sistem Kontrol Versi:
    • Gunakan sistem kontrol versi (misalnya, Git) untuk mengelola kode dan informasi versi aplikasi Anda. Ini memungkinkan Anda untuk melacak perubahan dan kembali ke versi sebelumnya jika perlu.
  • Dokumentasikan Proses:
    • Dokumentasikan proses untuk menambahkan dan mengelola informasi versi. Ini akan membantu anggota tim lain untuk memahami dan berkontribusi pada proses tersebut.

Kesimpulan

Menambahkan informasi versi ke file eksekusi tunggal PyInstaller penting untuk identifikasi aplikasi, manajemen rilis, dan debugging. Dengan mengikuti langkah-langkah yang diuraikan dalam artikel ini, Anda dapat dengan mudah memasukkan informasi versi ke dalam aplikasi Anda dan memastikan bahwa itu terorganisir dengan baik dan mudah dikelola. Ingatlah untuk mengotomatiskan proses, menggunakan sistem penamaan versi yang konsisten, dan mendokumentasikan prosesnya untuk hasil terbaik. Dengan melakukan itu, Anda akan memberikan pengalaman pengguna yang lebih profesional dan terpoles.

Semoga panduan ini bermanfaat! Selamat membangun aplikasi Anda!

“`

omcoding

Leave a Reply

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