python Setup.py क्या है?




python-3.x pypi (8)

यदि आपने रूट फ़ोल्डर में "setup.py" पैकेज डाउनलोड किया है, तो आप इसे चलाकर इंस्टॉल कर सकते हैं

python setup.py install

यदि आप एक परियोजना विकसित कर रहे हैं और सोच रहे हैं कि यह फ़ाइल किस लिए उपयोगी है, तो सेटअप स्क्रिप्ट लिखने पर पायथन दस्तावेज़ देखें

क्या कोई भी कृपया समझा सकता है, setup.py क्या है और इसे कैसे कॉन्फ़िगर या उपयोग किया जा सकता है?


setup.py एक पायथन फ़ाइल है, जो आमतौर पर आपको बताती है कि जिस मॉड्यूल / पैकेज को आप इंस्टॉल करने वाले हैं, उसे पैक किया गया है और डिस्ट्यूटल्स के साथ वितरित किया गया है, जो पायथन मॉड्यूल को वितरित करने के लिए मानक है।

यह आपको आसानी से पाइथन पैकेज स्थापित करने की अनुमति देता है। अक्सर लिखने के लिए पर्याप्त है:

$ python setup.py install

और मॉड्यूल खुद को स्थापित करेगा।

http://docs.python.org/install/index.html


जब आप setup.py साथ एक पैकेज डाउनलोड करते हैं तो अपना टर्मिनल (मैक, लिनक्स) या कमांड प्रॉम्प्ट (विंडोज) खोलें। cd का उपयोग करके और टैब बटन के साथ आपकी मदद करने के लिए पथ को उस फ़ोल्डर पर सेट करें जहां आपने फ़ाइल डाउनलोड की है और जहां setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

एंटर दबाएं, आपको ऐसा कुछ देखना चाहिए:

iMac:pakagefolderwithsetupfile user$

फिर इस python setup.py install बाद टाइप करें:

iMac:pakagefolderwithsetupfile user$ python setup.py install

enter दबाएं। किया हुआ!


setup.py एक पाइथन फ़ाइल किसी अन्य की तरह है। यह किसी भी नाम ले सकता है, सम्मेलन को छोड़कर इसे setup.py नाम दिया गया है ताकि प्रत्येक स्क्रिप्ट के साथ कोई अलग प्रक्रिया न हो।

पाइथन मॉड्यूल स्थापित करने के लिए अधिकांश बार setup.py का उपयोग किया जाता है लेकिन सर्वर अन्य उद्देश्यों को स्थापित करता है:

मॉड्यूल:

शायद यह setup.py का सबसे प्रसिद्ध उपयोग मॉड्यूल में है। हालांकि उन्हें pip का उपयोग करके स्थापित किया जा सकता है, पुराने पायथन संस्करणों में डिफ़ॉल्ट रूप से pip शामिल नहीं था और उन्हें अलग से स्थापित करने की आवश्यकता थी।

यदि आप एक मॉड्यूल स्थापित करना चाहते थे लेकिन pip स्थापित नहीं करना चाहते थे, तो केवल एक ही विकल्प के बारे में setup.py फ़ाइल से मॉड्यूल स्थापित करना था। यह python setup.py install माध्यम से हासिल किया जा सकता है। यह पाइथन मॉड्यूल को रूट डिक्शनरी ( pip , easy_install ect के बिना) में स्थापित करेगा।

pip असफल होने पर इस विधि का अक्सर उपयोग किया जाता है। उदाहरण के लिए यदि वांछित पैकेज का सही पायथन संस्करण pip माध्यम से उपलब्ध नहीं है, क्योंकि यह अब बनाए रखा नहीं गया है, तो स्रोत डाउनलोड करना और चल रहा है python setup.py install एक ही काम करेगा, संकलित बाइनरी के मामले में छोड़कर , (लेकिन पाइथन संस्करण को अनदेखा कर देगा - जब तक कोई त्रुटि वापस नहीं आती है)।

setup.py का एक अन्य उपयोग स्रोत से पैकेज स्थापित करना है। यदि कोई मॉड्यूल अभी भी विकास में है तो व्हील फाइलें उपलब्ध नहीं होंगी और इंस्टॉल करने का एकमात्र तरीका स्रोत से सीधे इंस्टॉल करना है।

पाइथन एक्सटेंशन बनाना:

जब एक मॉड्यूल बनाया गया है तो इसे डिस्ट्यूट सेटअप स्क्रिप्ट का उपयोग करके वितरण के लिए तैयार मॉड्यूल में परिवर्तित किया जा सकता है। इन्हें निर्मित करने के बाद उपरोक्त आदेश का उपयोग करके इंस्टॉल किया जा सकता है।

एक सेटअप स्क्रिप्ट बनाना आसान है और एक बार फ़ाइल को ठीक से कॉन्फ़िगर किया गया है और इसे python setup.py build (सभी आदेशों के लिए लिंक देखें) द्वारा संकलित किया जा सकता है।

एक बार फिर इसे उपयोग की आसानी और सम्मेलन के लिए setup.py नाम दिया गया है, लेकिन कोई नाम ले सकता है।

Cython:

setup.py फ़ाइलों का एक और प्रसिद्ध उपयोग संकलित एक्सटेंशन शामिल है। इन्हें उपयोगकर्ता परिभाषित मानों के साथ एक सेटअप स्क्रिप्ट की आवश्यकता होती है। वे तेजी से अनुमति देते हैं (लेकिन एक बार संकलित प्लेटफ़ॉर्म पर निर्भर होते हैं) निष्पादन। documentation से यहां एक सरल उदाहरण दिया गया documentation :

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

इसे python setup.py build माध्यम से संकलित किया जा सकता है

Cx_Freeze:

सेटअप स्क्रिप्ट की आवश्यकता वाले एक अन्य मॉड्यूल को cx_Freeze । यह पायथन स्क्रिप्ट को निष्पादन योग्य में परिवर्तित करता है। यह विवरण, नाम, आइकन, संकुल शामिल करने के लिए कई आदेशों को अनुमति देता है, ect को छोड़कर और एक बार रन एक वितरित अनुप्रयोग उत्पन्न करेगा। documentation से एक उदाहरण:

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

इसे python setup.py build माध्यम से संकलित किया जा सकता है।

तो setup.py फ़ाइल क्या है?

काफी आसानी से यह एक ऐसी स्क्रिप्ट है जो पाइथन पर्यावरण में कुछ बनाता है या कॉन्फ़िगर करती है।

वितरित किए जाने वाले पैकेज में केवल एक सेटअप स्क्रिप्ट होनी चाहिए, लेकिन एक साथ कई सेटअप स्क्रिप्ट में गठबंधन करना असामान्य नहीं है। ध्यान दें कि इसमें अक्सर distutils शामिल है लेकिन हमेशा नहीं (जैसा कि मैंने अपने आखिरी उदाहरण में दिखाया)। इसे याद रखने की बात सिर्फ कुछ तरीकों से पायथन पैकेज / स्क्रिप्ट को कॉन्फ़िगर करती है।

यह नाम लेता है ताकि निर्माण या स्थापित करते समय एक ही कमांड का हमेशा उपयोग किया जा सके।


setup.py एक बहु-मंच इंस्टॉलर के लिए पायथन का जवाब है और फ़ाइल make हैं।

यदि आप कमांड लाइन इंस्टॉलेशन से परिचित हैं, तो python setup.py build && python setup.py install अनुवाद make && make install python setup.py build && python setup.py install

कुछ पैकेज शुद्ध पायथन हैं, और केवल बाइट संकलित हैं। अन्य में मूल कोड हो सकता है, जिसके लिए एक देशी कंपाइलर (जैसे gcc या cl ) और पायथन इंटरफेसिंग मॉड्यूल (जैसे swig या pyrex ) की आवश्यकता होगी।


setup.py दो परिदृश्यों में प्रयोग किया जा सकता है, सबसे पहले, आप एक पायथन पैकेज स्थापित करना चाहते हैं। दूसरा, आप अपना खुद का पायथन पैकेज बनाना चाहते हैं। आमतौर पर मानक पायथन पैकेज में setup.py, setup.cfg और Manifest.in जैसी कुछ महत्वपूर्ण फ़ाइलें होती हैं। जब आप पाइथन पैकेज बना रहे हैं, तो ये तीन फाइलें (अंडे-जानकारी फ़ोल्डर के तहत पीकेजी-आईएनएफओ में सामग्री) नाम, संस्करण, विवरण, अन्य आवश्यक इंस्टॉलेशन (आमतौर पर .txt फ़ाइल में) और कुछ अन्य पैरामीटर निर्धारित करती हैं। setup.cfg को setup.py द्वारा पढ़ा जाता है जबकि पैकेज बनाया जाता है (tar.gz हो सकता है)। Manifest.in वह जगह है जहां आप परिभाषित कर सकते हैं कि आपके पैकेज में क्या शामिल होना चाहिए। वैसे भी आप setup.py जैसे का उपयोग कर सामान का गुच्छा कर सकते हैं

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

अन्य आदेशों का समूह है जिसका उपयोग setup.py के साथ किया जा सकता है। मदद के लिए

python setup.py --help-commands

आपके द्वारा डाउनलोड किए गए पायथन पैकेज को स्थापित करने के लिए, आप संग्रह निकालें और setup.py स्क्रिप्ट को अंदर चलाएं:

python setup.py install

मेरे लिए, यह हमेशा अजीब महसूस किया है। डाउनलोड में पैकेज प्रबंधक को इंगित करना अधिक स्वाभाविक होगा, जैसा कि रूबी और नोडजेस में होगा, उदाहरण के लिए। gem install rails-4.1.1.gem

एक पैकेज प्रबंधक भी अधिक आरामदायक है, क्योंकि यह परिचित और भरोसेमंद है। दूसरी ओर, प्रत्येक setup.py उपन्यास है, क्योंकि यह पैकेज के लिए विशिष्ट है। यह सम्मेलन में विश्वास की मांग करता है "मुझे भरोसा है कि यह setup.py वही आदेश लेता है जैसा मैंने पहले किया था"। यह मानसिक इच्छाशक्ति पर एक खेदजनक कर है।

मैं यह नहीं कह रहा हूं कि setup.py वर्कफ़्लो पैकेज प्रबंधक से कम सुरक्षित है (मुझे लगता है कि पिप बस setup.py को चलाता है), लेकिन निश्चित रूप से मुझे लगता है कि यह अजीब और झटकेदार है। सभी एक ही पैकेज प्रबंधक आवेदन के लिए आदेशों के लिए एक सद्भाव है। आप इसे भी पसंद कर सकते हैं।


यह आपकी मशीन पर एक पायथन पैकेज foo स्थापित करने में मदद करता है ( virtualenv में भी हो सकता है) ताकि आप अन्य प्रोजेक्ट्स से पैकेज foo आयात कर सकें और [I] पायथन प्रॉम्प्ट से भी आयात कर सकें।

यह pip , easy_install आदि के समान काम करता है,

setup.py का प्रयोग करना

आइए कुछ परिभाषाओं से शुरू करें:

पैकेज - एक फ़ोल्डर / निर्देशिका जिसमें __init__.py फ़ाइल है।
मॉड्यूल - .py एक्सटेंशन के साथ एक वैध पायथन फ़ाइल।
वितरण - कैसे एक पैकेज दूसरों से संबंधित है।

मान लें कि आप foo नामक एक पैकेज स्थापित करना चाहते हैं। फिर आप करते हैं,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

इसके बजाए, यदि आप वास्तव में इसे स्थापित नहीं करना चाहते हैं लेकिन फिर भी इसका उपयोग करना चाहते हैं। फिर करो,

$ python setup.py develop  

यह आदेश चीजों की प्रतिलिपि बनाने के बजाय साइट-पैकेज के भीतर स्रोत निर्देशिका में सिम्लिंक बनाएगा। इस वजह से, यह काफी तेज़ है (विशेष रूप से बड़े पैकेजों के लिए)।

setup.py बना रहा है

यदि आपके पास पैकेज पैकेज पेड़ है,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

फिर, आप अपनी setup.py स्क्रिप्ट में निम्न कार्य करते हैं ताकि इसे कुछ मशीन पर इंस्टॉल किया जा सके:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='[email protected]',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

इसके बजाए, यदि आपका पैकेज पेड़ नीचे की तरह अधिक जटिल है:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

फिर, इस मामले में आपका setup.py इस प्रकार होगा:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='[email protected]',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

अधिक सामग्री जोड़ें ( setup.py ) और इसे सभ्य बनाएं:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='[email protected]',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

long_description का उपयोग pypi.org में आपके पैकेज के README विवरण के रूप में किया जाता है।

और अंत में, अब आप अपने पैकेज को PyPi.org पर अपलोड करने के लिए तैयार हैं ताकि अन्य लोग आपके पैकेज को pip install yourpackage करके अपने पैकेज को pip install yourpackage

पहला कदम है कि आप अपने पैकेज नाम और स्थान का उपयोग करके पीपीआई में उपयोग करें:

$ python setup.py register

एक बार आपका पैकेज नाम पंजीकृत हो जाने पर, कोई भी इसका दावा या उपयोग नहीं कर सकता है। सफल पंजीकरण के बाद, आपको अपना पैकेज वहां (क्लाउड पर) अपलोड करना होगा,

$ python setup.py upload

वैकल्पिक रूप से, आप अपने पैकेज को GPG साथ भी साइन कर सकते हैं,

$ python setup.py --sign upload

बोनस : यहां एक वास्तविक प्रोजेक्ट से नमूना setup.py देखें: torchvision-setup.py





python-packaging