Setup.py क्या है?


990

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


7
एरिक: बेहतर उदाहरण सब कुछ एक साथ
रखना फायदेमंद

1
मेरे लिए, यह हमेशा अजीब लगता है कि आपने जो पैकेज निकाला है, उसे कैसे इंस्टॉल करें और जो आपने डाउनलोड किया है, उस पर पैकेज मैनेजर को इंगित करने के बजाय स्क्रिप्ट को अंदर चलाएं। यह अधिक स्वाभाविक होगा। stackoverflow.com/questions/1471994/what-is-setup-py/…
कर्नल पैनिक

जवाबों:


693

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

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

$ pip install . 

pipअपने मॉड्यूल को स्थापित करने के लिए setup.py का उपयोग करेगा। setup.pyसीधे फोन करने से बचें ।

https://docs.python.org/3/installing/index.html#installing-index


9
अगर आप इस मॉड्यूल को बनाने या संभालने के बारे में अपने ज्ञान को साझा करते हैं, तो मैं सराहना करूंगा। उदाहरण के लिए, कैसे एक बुनियादी मॉड्यूल बनाने के लिए, या कैसे पर एक स्क्रिप्ट का परीक्षण करने के लिए ./ymodule/bin जो आयात करता है ।/mymodule/libs/
पाउलो ओलिवेरा

7
@PauloOliveira डिस्टिल्स का वर्णन करने वाले पायथन मॉड्यूल्स का वितरण देखें , विशेष रूप से देखें 2. सेटअप स्क्रिप्ट लिखना
Yous

4
कभी भी अजगर अजगर सेटअप स्थापित न करें! यह आपके संस्करण को तोड़ता है! stackoverflow.com/questions/4324558/…
devinbost

2
@ मायके मुझे निश्चित रूप से नहीं पता है कि वर्कअराउंड क्या है, लेकिन मैं आपको बता सकता हूं कि सेटअप सेटअप को चलाने से मुझे बुरे सपने आते हैं जिसके लिए कई घंटों तक सफाई की आवश्यकता होती है। मैं अनुमान लगा रहा हूं कि पाइप या कोंडा के साथ बिल्डिंग / बंडलिंग समाधान होगा।
डेविनबॉस्ट

3
आप लिंक को docs.python.org/3/installing/index.html पर बदल सकते हैं , जो कि गैर-विरासत दस्तावेज़ लिंक है, और साथ ही पैकेजिंगहोमथॉन. org / tutorials / distributing के लिए लिंक जोड़ना अच्छा होगा। संकुल / # सेटअप- py जहाँ यह फ़ाइल के उद्देश्य को उजागर करता है setup.py
अल्वारो गुटिरेज पेरेस

491

यह 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='foomail@foo.com',
   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='foomail@foo.com',
   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='foomail@foo.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

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


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

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

$ python setup.py register

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

$ python setup.py upload

वैकल्पिक रूप से, आप अपने पैकेज के साथ GPG,

$ python setup.py --sign upload

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


12
केनेथ रिट्ज (आदरणीय के लेखक requests) ने स्पष्ट रूप से setup.py - github.com/kennethreitz/setup.py
boweeb

उप-पैकेज के बारे में क्या है, अर्थात पैकेज के अंदर मॉड्यूल वाले फ़ोल्डर?
fhchl

1
@ kmario23 अच्छा स्पष्टीकरण, धन्यवाद!
दिनको पीहर

1
मुझे यह उत्तर पसंद है
SW_user2953243

1
@ SW_user2953243 मुझे खुशी है कि आपने इसे उपयोगी पाया :)
kmario23

98

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

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

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


1
इसलिए उपर्युक्त सादृश्यता के अनुसार, यदि मॉड्यूल का निर्माण किसी कारण से विफल हो जाता है तो मैं setup.py स्क्रिप्ट के साथ छेड़छाड़ करूंगा ... सही है?
मोनालिसाओवरड्राइव

1
हां, कुछ कॉन्फिग फाइल भी हो सकती हैं जिन्हें आप देख सकते हैं।
whatnick

3
अगर मैं गलत हूं तो मुझे सुधारो, लेकिन मेरा मानना ​​है कि दोनों के बीच एक छोटा सा अंतर है। python setup.py install वास्तव में python setup.py buildपहले चलता है (इसलिए जब तक कि आपको विशिष्ट मामलों में उन्हें अलग से चलाने की आवश्यकता न हो)। मेरा मानना ​​है कि makeदौड़ने से पहले हमेशा हाथ से चलने की जरूरत होती है make install
joelostblom

6
@cheflo को वास्तव में makeकिसी विशिष्ट पैरामीटर (या ऑर्डरिंग) की आवश्यकता नहीं है: यह पूरी तरह से निर्माता के लिए है, Makefileजिसमें "लक्ष्य" उपलब्ध हैं (और जिस क्रम में उन्हें लागू करने की आवश्यकता है)। चूंकि नंगे Makefiles (आमतौर पर) बहुत पोर्टेबल नहीं होते हैं, वे कमांड (ऑटोटूलस) ./configureया cmake .(cmake) का उपयोग करके उत्पन्न होते हैं और यह इन प्रोग्रामों के लिए है कि आपको यह परिभाषित करना है कि आपको makeपहले स्पष्ट रूप से चलाने की आवश्यकता है make installया नहीं।
ntninja

3
मुझे यह बताने के लिए किसी एक की आवश्यकता है कि क्या हमें अभी भी dsd.python.org/3/installing/index.html पर डॉक्स के अनुसार किसी सेटअप का उपयोग करना चाहिए "जबकि डिस्टल्यूट का प्रत्यक्ष उपयोग चरणबद्ध किया जा रहा है, ... "
केमिन झोउ

53

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

python setup.py install

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


20

setup.pyएक पायथन लिपि है जिसे आमतौर पर पुस्तकालयों या कार्यक्रमों के साथ भेज दिया जाता है, जो उस भाषा में लिखी जाती है। यह उद्देश्य सॉफ्टवेयर की सही स्थापना है।

कई संकुल distutilsढांचे के साथ संयोजन का उपयोग करते हैं setup.py

http://docs.python.org/distutils/


19

setup.py का उपयोग दो परिदृश्यों में किया जा सकता है, सबसे पहले, आप पायथन पैकेज स्थापित करना चाहते हैं। दूसरा, आप अपना खुद का पायथन पैकेज बनाना चाहते हैं। आमतौर पर मानक पायथन पैकेज में सेटअप एरोमा, setup.cfg और Manifest.in जैसी महत्वपूर्ण फाइलें होती हैं। जब आप पायथन पैकेज बना रहे हैं, तो ये तीन फाइलें (अंडे-जानकारी फ़ोल्डर के तहत PKG-INFO में सामग्री) नाम, संस्करण, विवरण, अन्य आवश्यक स्थापनाएं (आमतौर पर .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

के लिए धन्यवाद python setup.py --help-commands। Setup.py में खुदाई करते समय बहुत उपयोगी है।
पलक

8

जब आप 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। किया हुआ!


7

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

python setup.py install

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

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

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


1
तब आप easy_install या समान का उपयोग कर सकते हैं। Btw, पायथन में अंडे हैं, जैसे कि रूबी रत्न।
पावेल daमरदा

7

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

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

मॉड्यूल:

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

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

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

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

बिल्डिंग पायथन एक्सटेंशन:

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

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

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

Cython:

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

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 को बाहर करने और एक बार चलाने के लिए एक वितरण योग्य एप्लिकेशन का उत्पादन करने की अनुमति देता है। प्रलेखन से एक उदाहरण :

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लेकिन हमेशा नहीं (जैसा कि मैंने अपने अंतिम उदाहरण में दिखाया है)। इसे याद रखने की चीज सिर्फ किसी तरह से पायथन पैकेज / स्क्रिप्ट को कॉन्फ़िगर करती है।

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


6

इसे सरल बनाने के लिए, "__main__"जब आप इंस्टॉल किए गए फ़ंक्शन को अन्य उत्तरों का उल्लेख करते हैं , तो setup.py चलाया जाता है । Setup.py के अंदर, आपको अपना पैकेज स्थापित करने के लिए आवश्यक सब कुछ रखना चाहिए।

सामान्य सेटअप काम करता है

निम्नलिखित दो खंडों में दो चीजों पर चर्चा की गई है, जिनमें कई सेटअप-मोड्यूल हैं।

setuptools.setup

यह फ़ंक्शन आपको प्रोजेक्ट विशेषताओं को प्रोजेक्ट के नाम, संस्करण के रूप में निर्दिष्ट करने की अनुमति देता है .... सबसे महत्वपूर्ण बात, यह फ़ंक्शन आपको अन्य कार्यों को स्थापित करने की अनुमति देता है यदि वे ठीक से पैक किए गए हैं। इस वेबपेज को setuptools.setup के उदाहरण के लिए देखें । setuptools.setup की

ये विशेषताएँ इस प्रकार के पैकेजों को स्थापित करने में सक्षम हैं:

  • वे पैकेज जो आपकी परियोजना में आयात किए गए हैं और सेटपूलसैप्टेनपैकेज का उपयोग करके PyPI में सूचीबद्ध हैं :

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • पैकेज PyPI में नहीं , लेकिन एक URL से dependency_links का उपयोग करके डाउनलोड किया जा सकता है

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

कस्टम कार्य

एक आदर्श दुनिया में, setuptools.setupआप के लिए सब कुछ संभाल लेंगे। दुर्भाग्य से यह हमेशा मामला नहीं है। कभी-कभी आपको कुछ विशिष्ट चीजें करनी होती हैं, जैसे कि सबप्रोसेस कमांड के साथ निर्भरता स्थापित करना , उस सिस्टम को प्राप्त करने के लिए जिसे आप अपने पैकेज के लिए सही स्थिति में स्थापित कर रहे हैं। इससे बचने की कोशिश करें, ये कार्य भ्रमित करते हैं और अक्सर ओएस और यहां तक ​​कि वितरण के बीच भिन्न होते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.