किसी को भी समझा सकते हैं कि क्या setup.py
है और इसे कैसे कॉन्फ़िगर या उपयोग किया जा सकता है?
किसी को भी समझा सकते हैं कि क्या setup.py
है और इसे कैसे कॉन्फ़िगर या उपयोग किया जा सकता है?
जवाबों:
setup.py
एक अजगर फ़ाइल है, जो आमतौर पर आपको बताती है कि आप जिस मॉड्यूल / पैकेज को स्थापित करने जा रहे हैं, उसे डिस्टिल्स के साथ पैक और वितरित किया गया है, जो पायथन मॉड्यूल को वितरित करने के लिए मानक है।
यह आपको आसानी से पायथन पैकेज स्थापित करने की अनुमति देता है। अक्सर यह लिखने के लिए पर्याप्त है:
$ pip install .
pip
अपने मॉड्यूल को स्थापित करने के लिए setup.py का उपयोग करेगा। setup.py
सीधे फोन करने से बचें ।
https://docs.python.org/3/installing/index.html#installing-index
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='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
requests
) ने स्पष्ट रूप से setup.py - github.com/kennethreitz/setup.py
setup.py
एक बहु-मंच इंस्टॉलर और make
फ़ाइल के लिए पायथन का जवाब है ।
यदि आप कमांड लाइन इंस्टालेशन से परिचित हैं, तो make && make install
अनुवाद करता है python setup.py build && python setup.py install
।
कुछ पैकेज शुद्ध पायथन हैं, और केवल बाइट संकलित हैं। अन्य में मूल कोड हो सकता है, जिसके लिए एक मूल संकलक (जैसे gcc
या cl
) और एक पायथन इंटरफेसिंग मॉड्यूल (जैसे swig
या pyrex
) की आवश्यकता होगी।
python setup.py install
वास्तव में python setup.py build
पहले चलता है (इसलिए जब तक कि आपको विशिष्ट मामलों में उन्हें अलग से चलाने की आवश्यकता न हो)। मेरा मानना है कि make
दौड़ने से पहले हमेशा हाथ से चलने की जरूरत होती है make install
।
make
किसी विशिष्ट पैरामीटर (या ऑर्डरिंग) की आवश्यकता नहीं है: यह पूरी तरह से निर्माता के लिए है, Makefile
जिसमें "लक्ष्य" उपलब्ध हैं (और जिस क्रम में उन्हें लागू करने की आवश्यकता है)। चूंकि नंगे Makefile
s (आमतौर पर) बहुत पोर्टेबल नहीं होते हैं, वे कमांड (ऑटोटूलस) ./configure
या cmake .
(cmake) का उपयोग करके उत्पन्न होते हैं और यह इन प्रोग्रामों के लिए है कि आपको यह परिभाषित करना है कि आपको make
पहले स्पष्ट रूप से चलाने की आवश्यकता है make install
या नहीं।
यदि आपने रूट फ़ोल्डर में "setup.py" पैकेज डाउनलोड किया है, तो आप इसे चलाकर स्थापित कर सकते हैं
python setup.py install
यदि आप एक परियोजना विकसित कर रहे हैं और सोच रहे हैं कि यह फाइल किस लिए उपयोगी है, तो सेटअप स्क्रिप्ट लिखने पर पायथन प्रलेखन की जांच करें
setup.py
एक पायथन लिपि है जिसे आमतौर पर पुस्तकालयों या कार्यक्रमों के साथ भेज दिया जाता है, जो उस भाषा में लिखी जाती है। यह उद्देश्य सॉफ्टवेयर की सही स्थापना है।
कई संकुल distutils
ढांचे के साथ संयोजन का उपयोग करते हैं setup.py
।
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 में खुदाई करते समय बहुत उपयोगी है।
जब आप 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
। किया हुआ!
आपके द्वारा डाउनलोड किया गया एक पायथन पैकेज स्थापित करने के लिए, आप संग्रह को निकालते हैं और अंदर सेटअप स्क्रिप्ट को चलाते हैं:
python setup.py install
मेरे लिए, यह हमेशा अजीब लगा है। एक पैकेज मैनेजर को डाउनलोड के समय इंगित करना अधिक स्वाभाविक होगा, क्योंकि एक रूबी और नोड्स में करेगा, उदा।gem install rails-4.1.1.gem
एक पैकेज प्रबंधक अधिक आरामदायक भी है, क्योंकि यह परिचित और विश्वसनीय है। दूसरी ओर, प्रत्येक setup.py
उपन्यास है, क्योंकि यह पैकेज के लिए विशिष्ट है। यह कन्वेंशन में विश्वास की मांग करता है "मुझे विश्वास है कि यह setup.py अन्य कमांड के समान है जो मैंने अतीत में उपयोग किया है"। यह मानसिक इच्छाशक्ति पर एक खेदजनक कर है।
मैं यह नहीं कह रहा हूं कि सेटअप प्रबंधक एक प्रबंधक की तुलना में सेटअप वर्कफ़्लो कम सुरक्षित है (मैं समझता हूं कि पिप सिर्फ सेटअपहोम के अंदर चलता है), लेकिन निश्चित रूप से मुझे लगता है कि यह अजीब और घबराहट है। सभी एक ही पैकेज मैनेजर एप्लिकेशन पर कमांड करने के लिए सामंजस्य है। तुम भी शौकीन हो सकते हैं।
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
लेकिन हमेशा नहीं (जैसा कि मैंने अपने अंतिम उदाहरण में दिखाया है)। इसे याद रखने की चीज सिर्फ किसी तरह से पायथन पैकेज / स्क्रिप्ट को कॉन्फ़िगर करती है।
यह नाम लेता है इसलिए भवन या स्थापित करते समय एक ही कमांड का हमेशा उपयोग किया जा सकता है।
इसे सरल बनाने के लिए, "__main__"
जब आप इंस्टॉल किए गए फ़ंक्शन को अन्य उत्तरों का उल्लेख करते हैं , तो setup.py चलाया जाता है । Setup.py के अंदर, आपको अपना पैकेज स्थापित करने के लिए आवश्यक सब कुछ रखना चाहिए।
निम्नलिखित दो खंडों में दो चीजों पर चर्चा की गई है, जिनमें कई सेटअप-मोड्यूल हैं।
यह फ़ंक्शन आपको प्रोजेक्ट विशेषताओं को प्रोजेक्ट के नाम, संस्करण के रूप में निर्दिष्ट करने की अनुमति देता है .... सबसे महत्वपूर्ण बात, यह फ़ंक्शन आपको अन्य कार्यों को स्थापित करने की अनुमति देता है यदि वे ठीक से पैक किए गए हैं। इस वेबपेज को 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
आप के लिए सब कुछ संभाल लेंगे। दुर्भाग्य से यह हमेशा मामला नहीं है। कभी-कभी आपको कुछ विशिष्ट चीजें करनी होती हैं, जैसे कि सबप्रोसेस कमांड के साथ निर्भरता स्थापित करना , उस सिस्टम को प्राप्त करने के लिए जिसे आप अपने पैकेज के लिए सही स्थिति में स्थापित कर रहे हैं। इससे बचने की कोशिश करें, ये कार्य भ्रमित करते हैं और अक्सर ओएस और यहां तक कि वितरण के बीच भिन्न होते हैं ।