Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में zipapp - एक्ज़ीक्यूटेबल पायथन ज़िप आर्काइव्स प्रबंधित करें

zipapp मॉड्यूल (पायथन 3.5+) पायथन कोड वाले ज़िप फाइल्स बनाने और प्रबंधित करने की सुविधा देता है जिन्हें पायथन इंटरप्रेटर द्वारा सीधे निष्पादित किया जा सकता है।

कमांड-लाइन इंटरफेस

बेसिक उपयोग

# myapp फोल्डर में example.py होना चाहिए जिसमें main() फंक्शन हो
python -m zipapp myapp -m "example:main"

फोल्डर संरचना

myapp/
├── example.py
└── __init__.py (वैकल्पिक)

example.py

def main():
    print('Hello World')

if __name__ == '__main__':
    main()

आर्काइव बनाएं और चलाएं

# आर्काइव बनाएं
python -m zipapp myapp -m "example:main"

# आउटपुट: myapp.pyz

# चलाएं
python myapp.pyz
# आउटपुट: Hello World

कमांड-लाइन विकल्प

विकल्पविवरण
-o <output>, --output=<output>आउटपुट फाइल नाम (डिफ़ॉल्ट: <source>.pyz)
-p <interpreter>, --python=<interpreter>इंटरप्रेटर निर्दिष्ट करें (shebang लाइन)
-c, --compressडिफ्लेट कंप्रेशन के साथ फाइल्स कंप्रेस करें
-m <module:func>, --main=<module:func>एंट्री पॉइंट (module:function)
--infoआर्काइव जानकारी दिखाएं

उदाहरण: कस्टम विकल्पों के साथ

# कंप्रेस्ड आर्काइव, कस्टम नाम, स्पष्ट इंटरप्रेटर
python -m zipapp myapp -m "example:main" -o myapp.pyz -p "/usr/bin/env python3" -c

प्रोग्रामेटिक API

zipapp.create_archive(source, target, interpreter, main, compressed)

import zipapp

# बेसिक
zipapp.create_archive('myapp', 'myapp.pyz')

# पूर्ण विकल्पों के साथ
zipapp.create_archive(
    source='myapp',
    target='dist/myapp.pyz',
    interpreter='/usr/bin/env python3',
    main='example:main',
    compressed=True
)

zipapp.get_interpreter(archive)

import zipapp

interpreter = zipapp.get_interpreter('myapp.pyz')
print(f"इंटरप्रेटर: {interpreter}")

आर्काइव संरचना

myapp.pyz
├── #!/usr/bin/env python3  (shebang यदि -p दिया गया)
├── __main__.py             (एंट्री पॉइंट - main() कॉल करता है)
├── example.py
└── अन्य मॉड्यूल्स...

उन्नत: मल्टीपल एंट्री पॉइंट्स

एक आर्काइव में एक ही एंट्री पॉइंट हो सकता है। मल्टीपल कमांड्स के लिए:

# __main__.py में
import sys
from myapp import cli

if __name__ == '__main__':
    # sys.argv के आधार पर अलग फंक्शन कॉल करें
    if len(sys.argv) > 1 and sys.argv[1] == 'cmd2':
        cli.cmd2()
    else:
        cli.main()

सीमाएं

  • केवल प्योर-पायथन पैकेजेस (C एक्सटेंशन नहीं)
  • निर्भरताएं शामिल नहीं होतीं (अलग से इंस्टॉल करें या shiv, pex जैसे टूल्स उपयोग करें)
  • पायथन 3.5+ आवश्यक

विकल्प

  • shiv - निर्भरताओं के साथ सेल्फ-कंटेन्ड आर्काइव
  • pex - पायथन एक्ज़ीक्यूटेबल आर्काइव्स
  • PyInstaller - स्टैंडअलोन एक्ज़ीक्यूटेबल्स
  • cx_Freeze - फ्रीजिंग टूल

उपयोग के मामले

  • सरल CLI टूल्स वितरण
  • एयर-गैप्ड एनवायरनमेंट्स में डिप्लॉयमेंट
  • सिंगल-फाइल स्क्रिप्ट्स शेयर करना
  • कंटेनर इमेज आकार कम करना
  1. - Python का उपयोग करके Folder को Recursively Zip कैसे करें?

    Directory का Zip Archive बनाना zipfile Module का उपयोग करके Directory का Zip Archive बनाएं। os.walk का उपयोग करके Directory Tree को Walk करें और इसमें सभी Files को Recursively Add करें। उदाहरण import os import zipfile def zipdir(path, ziph): # ziph is zipfile handle for root, dirs, files

  1. - Python का उपयोग करके Directory का Zip Archive कैसे Create करें?

    Directory का Zip Archive बनाना zipfile Module का उपयोग करके Directory का Zip Archive बनाएं। os.walk का उपयोग करके Directory Tree को Walk करें और इसमें सभी Files को Recursively Add करें। उदाहरण import os import zipfile def zipdir(path, ziph): # ziph is zipfile handle for root, dirs, files

  1. - कई पायथन मॉड्यूल को कैसे बंडल करें?

    यह मानते हुए कि आप पायथन 2.6 या बाद के संस्करण का उपयोग कर रहे हैं, आप स्क्रिप्ट को एक ज़िप फ़ाइल में पैकेज कर सकते हैं, एक `__main__.py` जोड़ सकते हैं और ज़िप फ़ाइल को सीधे चला सकते हैं। उदाहरण के लिए, यदि आप सभी फ़ाइलों को `my_app.zip` नाम की फ़ाइल में ज़िप करते हैं और अपनी मुख्य स्क्रिप्ट को `__m