استفاده از pyinstaller

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/04
  • تعداد بازدید: 458

روشی که در پست بررسی خواهیم کرد در هر سه سیستم عامل ویندوز/لینوکس/مک تفاوتی نخواهد داشت و صرفا خروجی های متفاوتی را ایجاد خواهد کرد که مختص به آن سیستم عامل و معماری پردازنده است. قبل از هر کاری مراحل زیر را انجام داده تا به بررسی دستورات لازم بپردازیم.

آماده سازی:

  • پوشه ای برای پروژه خود ایجاد نمایید
  • قطعه کد های خود را به آن منتقل کنید 
  • در صورتی که از ماژول هایی استفاده می نمایید که به صورت دستی ایجاد کردید، آن ها را نیز منتقل نمایید
  • در داخل پوشه ترمینال/ cmd را بر اساس سیستم عاملی که در آن کار می کنید باز نمایید

برای اینکه همه چیز راحت تر قابل درک باشد یک سناریو برنامه را ایجاد می کنیم.فرض کنید پروژه ما محاسبه یک عمل ریاضی است که در محیط خط فرمان انجام میشود و شامل قطعه کد زیر است را آزمایش خواهیم کرد و سیستم عامل هدف ما در این لحظه Windows 10 64bit  خواهد بود.

# main.py
num = int(input("enter a number to sum with 5: "))
print(num+5)
input("enter anything to quit")

قطعه کد را در یک پوشه با نام main.py ذخیره نمایید. سپس با استفاده از دستور زیر خروجی برنامه ما ایجاد خواهد شد که شامل پوشه هایی هستش که با هم بررسی خواهیم کرد.

pyinstaller main.py

پس از گذشت چند دقیقه و نمایش یکسری اطلاعات در خط فرمان بالاخره خط فرمان متوقف شده و آماده پذیرش دستور بعدی می شود که در این لحظه به معنای این هستش که کار تمام شده است و خروجی زیر را مشاهده خواهید کرد.

├ main.py
├ main.spec
├───build
│   └───main
├───dist
│   └───main
│       ├───Include
│       ├───lib2to3
│       │   └───tests
│       │       └───data
│       ├───tcl
│       │   ├───encoding
│       │   ├───http1.0
│       │   ├───msgs
│       │   ├───opt0.4
│       │   └───tzdata
│       │
│       └───tk
│           ├───images
│           ├───msgs
│           └───ttk
└───__pycache__

همانطور که در خروجی  بالا می بینید چندین پوشه و فایل پس از اجرای دستور ایجاد شده است.

که به بررسی موارد زیر خواهیم پرداخت:

  • *.spec file
  • build/ folder
  • dist/ folder

بررسی فایل *.spec  

فایل spec به طور پیش فرض از اسکریپت CLI شما نامگذاری خواهد شد.فایلی به نام main.spec را مشاهده خواهید کرد. در اینجا فایل مشخصات پیش فرض پس از اجرای PyInstaller در فایل main.py ایجاد می شود که شامل موارد زیر است:

# -*- mode: python -*-

block_cipher = None

a = Analysis(['main.py'],
             pathex=['/Users/realpython/pyinstaller/reader'],
             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='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='main')

این فایل به طور خودکار توسط دستور pyinstaller ایجاد می شود. نسخه شما مسیرهای مختلفی خواهد داشت ، اما اکثریت آنها باید یکسان باشند. نگران نباشید ، برای استفاده موثر از PyInstaller نیازی به درک کد بالا نیست! این فایل را می توان تغییر داد و برای تغییر در نسخه های بعدی استفاده نمود. می توانید با تهیه این فایل مشخصات به جای اسکریپت point-point به دستور pyinstaller ، نسخه های آینده را کمی سریعتر کنید. چند مورد استفاده خاص برای specs و مشخصات PyInstaller وجود دارد. با این حال ، برای پروژه های ساده ، دیگر نگران این جزئیات نخواهید بود ، مگر اینکه بخواهید نحوه ساخت پروژه خود را به شدت سفارشی کنید.

پوشه build

پوشه  build جایی است که PyInstaller بیشتر داده های فراداده و پرونده های داخلی را برای ساخت برنامه اجرایی شما قرار می دهد. محتوای پیش فرض چیزی شبیه به این خواهد بود:

build/
|
└── main/
    ├── Analysis-00.toc
    ├── base_library.zip
    ├── COLLECT-00.toc
    ├── EXE-00.toc
    ├── main.exe
    ├── main.exe.manifest
    ├── PKG-00.pkg
    ├── PKG-00.toc
    ├── PYZ-00.pyz
    ├── PYZ-00.toc
    ├── warn-main.txt
    └── xref-main.html

پوشه build می تواند برای رفع اشکال مفید باشد ، اما تا زمانی که مشکلی نداشته باشید ، می توان این پوشه را تا حد زیادی نادیده گرفت. 

پوشه dist

پس از ساخت ، در انتها با یک پوشه dist / مشابه موارد زیر مواجه خواهید شد:

dist/
|
└── main/
    └── main

پوشه dist / شامل خروجی نهایی است که می خواهید برای کاربران خود ارسال کنید. درون پوشه dist / پوشه ای وجود دارد که به نام پروژه و فایل اصلی شما نامگذاری شده است. بنابراین در این مثال ، یک پوشه dist / main خواهید داشت که شامل تمام وابستگی ها و قابل اجرا برای برنامه ما است.در صورتی که در محیط ویندوز هستید شامل فایل exe نیز خواهد بود

همچنین بسته به سیستم عامل خود ، فایلهای زیادی با پسوند .so ، .pyd و .dll پیدا خواهید کرد. اینها کتابخانه های اشتراکی هستند که نشان دهنده وابستگی های پروژه شما است که PyInstaller ایجاد و جمع آوری کرده است.