Python setup.py विकसित बनाम स्थापित


336

Setup.py में दो विकल्प हैं developऔर installमुझे भ्रमित कर रहे हैं। इस साइट के अनुसार , का उपयोग करdevelop साइट-संकुल निर्देशिका के लिए एक विशेष लिंक बनाता है।

लोगों ने सुझाव दिया है कि मैं python setup.py installएक नए इंस्टॉलेशन के लिए उपयोग करता हूं और python setup.py developसेटअप फ़ाइल में किसी भी परिवर्तन के बाद।

क्या इन आदेशों के उपयोग पर कोई प्रकाश डाल सकता है?

जवाबों:


468

python setup.py install का उपयोग (आमतौर पर थर्ड पार्टी) पैकेज को स्थापित करने के लिए किया जाता है, जिसे आप स्वयं विकसित / संशोधित / डिबग नहीं करने जा रहे हैं।

अपने स्वयं के सामान के लिए, आप पहले अपने पैकेज को स्थापित करना चाहते हैं और फिर हर बार पैकेज को फिर से स्थापित किए बिना अक्सर कोड को संपादित करने में सक्षम हो सकते हैं - और यही वह है जो python setup.py developकरता है: यह पैकेज स्थापित करता है (आमतौर पर सिर्फ एक स्रोत फ़ोल्डर) एक तरह से जो आपको (वर्चुअल) वातावरण में स्थापित होने के बाद अपने कोड को आसानी से संपादित करने की अनुमति देता है, और परिवर्तन तुरंत प्रभाव डालते हैं।

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


81
एरिक सही है। यह जानने के लिए भी उपयोगी है कि जब आप हैकिंग कर रहे हैं, तो setup.py developएक --uninstallविकल्प के साथ आता है ।
दलेदाम्स

5
यहां अंतिम विचार यह है कि setup.py developअजगर पैकेज पर हैक करने के लिए एक और विकल्प पैकेज को ठीक से हल करने के लिए "सरल (लेकिन स्पष्ट) पथ संशोधन का उपयोग करना है" केनेथ रिट्ज
दार्दाम्स

4
मैं python setup.py developस्थानीय विकास के लिए Ceilometer स्थापित करने की कोशिश कर समस्याओं में भाग गया । मैंने pip install -e PATHउन समस्याओंeasy_install से बचने के लिए (एक वर्चुअन के भीतर) का उपयोग कर समाप्त कर दिया, जिनके माध्यम से फसल हुई
जो डी। एंड्रिया

1
यकीन नहीं अगर यह मायने रखता है, लेकिन अगर मैं अजगर 3 आदि का उपयोग कर रहा हूं, तो क्या किसी को python setup.py developअलग तरीके से चलना होगा ?
चार्ली पार्कर

1
यह python3 के साथ काम करता है, लेकिन आपके पास मौजूद किसी भी मौजूदा पाइप की स्थापना को हटाने के लिए मत भूलना, क्योंकि वे एक साथ टकराएंगे (यह इस समय मेरे साथ हुआ)।
लेओ जर्मोंड

124

से प्रलेखनdevelopपैकेज स्थापित नहीं होगा, लेकिन यह एक बनाएगा .egg-linkपरियोजना स्रोत कोड निर्देशिका के लिए तैनाती निर्देशिका पीठ में।

तो यह स्थापित करने जैसा है, लेकिन site-packagesइसे कॉपी करने के बजाय एक प्रतीकात्मक लिंक (ए) जोड़ता है.egg-link एक मल्टीप्लायर प्रतीकात्मक लिंक के रूप कार्य करता है) को ।

इस तरह आप स्रोत कोड को संपादित कर सकते हैं और हर बार जब आप थोड़ा सा बदलाव करते हैं तो बिना किसी बदलाव के सीधे परिवर्तन देख सकते हैं। यह उपयोगी है जब आप उस परियोजना के डेवलपर हैं इसलिए नाम develop। यदि आप किसी और के पैकेज को स्थापित कर रहे हैं तो आपको उसका उपयोग करना चाहिएinstall


24

एक और चीज़ जो developविधि का उपयोग करते समय लोगों को उपयोगी लग सकती है वह है --userबिना सूदो के स्थापित करने का विकल्प। उदाहरण के लिए:

python setup.py develop --user

के बजाय

sudo python setup.py develop

11
IIUC आपको setup.py developअपने सिस्टम में कभी नहीं होना चाहिए , यह केवल एक virtualenv में समझ में आता है।
डिवाइडबीज़रो

2
@dividebyzero क्या आपको लगता है python setup.py develop --userकि मुझे हमेशा सही तरीके से उपयोग करना चाहिए ? इसके अलावा, क्या आप मुझे बता सकते हैं कि पैकेज का उपयोग करके कहाँ स्थापित किया गया है python setup.py develop --user? धन्यवाद!
ROBOT AI

2
मुझे लगता है कि --userआपके घर के खाते में एक निर्देशिका स्थापित होगी, और आपके सिस्टम में अन्य उपयोगकर्ताओं को प्रभावित नहीं करेगी। developवास्तव में सब कुछ को कॉपी करने की बजाय अपनी परियोजना स्रोत निर्देशिका के लिए लिंक कर देगा। develop --userठीक होना चाहिए, और developएक virtualenv में भी। केवल developवास्तविक प्रणाली ही अजीब है, क्योंकि आपके पास कुछ अन्य उपयोगकर्ता हो सकते हैं जो प्रोजेक्ट स्रोत कोड की आपकी व्यक्तिगत प्रतिलिपि में प्रोजेक्ट की ओर इशारा करते हैं।
डिवाइडबीज़रो

4
कई (अधिकांश?) लोग बहु-उपयोगकर्ता प्रणालियों पर नहीं चल रहे हैं
patstew

1
@boatcoder, Mac और Linux (और Windows) बहु-उपयोगकर्ता सक्षम सिस्टम हो सकते हैं, लेकिन सबसे अधिक संभावना है कि डेवलपर अपने डेस्कटॉप का एकमात्र (वास्तविक) उपयोगकर्ता खाता है, और मेरा मानना ​​है कि इसका मतलब है कि पास्टवे का मतलब क्या है।
MestreLion
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.