कई वातावरणों के लिए आवश्यकताओं को कैसे अनुकूलित करें।


112

मेरी दो शाखाएँ हैं, विकास और उत्पादन। प्रत्येक की निर्भरताएं हैं, जिनमें से कुछ अलग हैं। विकास उन निर्भरताओं को इंगित करता है जो स्वयं विकास में हैं। इसी तरह उत्पादन के लिए। मुझे हरोकू में तैनात करने की आवश्यकता है, जो 'आवश्यकताओं की आवश्यकता' नामक एक फ़ाइल में प्रत्येक शाखा की निर्भरता की अपेक्षा करता है।

व्यवस्थित करने का सबसे अच्छा तरीका क्या है?

मैंने क्या सोचा है:

  • अलग-अलग आवश्यकताओं की फाइलों को बनाए रखें, प्रत्येक शाखा में एक (लगातार विलय से बचना चाहिए!)
  • हरोकू को बताएं कि मैं किस फ़ाइल का उपयोग करना चाहता हूं (पर्यावरण चर?)
  • तैनात स्क्रिप्ट लिखें (अस्थायी शाखा बनाएं, आवश्यकताओं फ़ाइल को संशोधित करें, प्रतिबद्ध करें, तैनात करें, अस्थायी शाखा हटाएं)

1
आसान परिनियोजन स्क्रिप्ट: 2 फ़ाइलों को बनाए रखें। उनके बीच सहजीवन का उपयोग करें।
उडी

जवाबों:


208

आप अपनी आवश्यकताओं की फाइलों को कैस्केड कर सकते हैं और एक फाइल को दूसरे के अंदर एक फाइल की सामग्री को शामिल करने के लिए "-r" झंडे का उपयोग कर सकते हैं। आप अपनी आवश्यकताओं को इस तरह से एक मॉड्यूलर फ़ोल्डर पदानुक्रम में तोड़ सकते हैं:

`-- django_project_root
|-- requirements
|   |-- common.txt
|   |-- dev.txt
|   `-- prod.txt
`-- requirements.txt

फ़ाइलों की सामग्री इस तरह दिखाई देगी:

common.txt:

# Contains requirements common to all environments
req1==1.0
req2==1.0
req3==1.0
...

dev.txt:

# Specifies only dev-specific requirements
# But imports the common ones too
-r common.txt
dev_req==1.0
...

prod.txt:

# Same for prod...
-r common.txt
prod_req==1.0
...

हेरोकू के बाहर, अब आप इस तरह से वातावरण सेट कर सकते हैं:

pip install -r requirements/dev.txt

या

pip install -r requirements/prod.txt

चूँकि हरोकू प्रोजेक्ट रूट पर "आवश्यकताओं" के लिए विशेष रूप से देखता है, इसलिए इसे इस तरह से केवल दर्पण को दिखाना चाहिए:

requirements.txt:

# Mirrors prod
-r requirements/prod.txt

2
आपने इस समस्या को अनदेखा कर दिया कि कैसे हरकोक पर विभिन्न वातावरणों के लिए अलग-अलग आवश्यकताओं की फाइलों का उपयोग किया जाए।
एड जे।

29
मुझे विश्वास है कि मेरे उत्तर ने संबोधित किया है।
क्रिश्चियन एबॉट

1
मैं हेजोकू पर अलग-अलग आवश्यकताओं के लिए एक रास्ता खोज रहा था (जहां मुझे अतिरिक्त डिबग पैकेज चाहिए) और उत्पादन वातावरण (जहां मुझे इन डिबग पैकेजों की आवश्यकता नहीं है)। दुर्भाग्य से, जैसा कि @ ईडीजे ने कहा, यह उत्तर इस पर ध्यान नहीं देता है।
एंटोनी पिंसर्ड

1
मुझे आपके प्रश्न की गलतफहमी हो सकती है या शायद आपका प्रश्न मूल पोस्टर से अलग है। लेकिन स्पष्टीकरण के लिए, मचान शाखा की आवश्यकताओं को पूरा करने के लिए। "में -आर आवश्यकताएँ / स्टेजिंग टेक्सट" (या समान) शामिल हो सकता है, जबकि ठेस शाखा की एक "-आर आवश्यकताएँ / prod.txt" हो सकती है (मेरा उत्तर देखें)। उपयुक्त शाखा को इसके संबंधित हरोकू उदाहरण के साथ सिंक करें।
क्रिश्चियन एबॉट

2
@SohamNavadiya यह वह नहीं है जो मैंने पूछा था। मान लें कि मेरे पास base.txtइसमें 3 पैकेज हैं, और dev.txtइसमें 1 पैकेज (और -r base.txt) के साथ है। मेरे वर्चुअल वातावरण में सभी 4 पैकेज स्थापित हैं। मैं अब 5 वें पैकेज को स्थापित करना चाहता हूं और इसे आधार में सूचीबद्ध करता हूं, न कि देव में, मैं इसे कैसे करूं? ज़रूर, मैं इसे स्थापित कर सकता हूं pip freeze > base.txtलेकिन यह समस्या का समाधान नहीं करता है। यह तब 4 डी देव निर्भरता को आधार में रखता है जो मुझे नहीं चाहिए।
मनन मेहता

11

एक व्यवहार्य विकल्प आज जो अस्तित्व में नहीं था जब मूल प्रश्न और उत्तर पोस्ट किया गया था निर्भरता का प्रबंधन करने के लिए पाइप के बजाय पिपेनव का उपयोग करना है।

पिपेनव के साथ, मैन्युअल रूप से पाइप के साथ दो अलग-अलग आवश्यकता फ़ाइलों का प्रबंधन करना आवश्यक नहीं है, और इसके बजाय पिपेनव कमांड लाइन पर बातचीत के माध्यम से विकास और उत्पादन पैकेजों का प्रबंधन करता है।

उत्पादन और विकास दोनों में उपयोग के लिए एक पैकेज स्थापित करने के लिए:

pipenv install <package>

केवल विकास पर्यावरण के लिए एक पैकेज स्थापित करने के लिए:

pipenv install <package> --dev

उन कमांडों, पिपेनव स्टोर्स को वाया और दो फाइल (Pipfile और Pipfile.lock) में पर्यावरण कॉन्फ़िगरेशन का प्रबंधन करता है। हेरोकू का वर्तमान पायथन बिल्डपैक मूल रूप से पिपेनव का समर्थन करता है और यह आवश्यकताओं के बजाय मौजूद होने पर खुद को Pipfile.lock से कॉन्फ़िगर करेगा।

टूल के पूर्ण प्रलेखन के लिए पिपेनव लिंक देखें।


4
पिपेनव समय की बर्बादी है। ताला बहुत लंबा लगता है।
नुरेटिन

9
पिपेनव लगभग सभी पहलुओं पर टूट गया है। यह बहुत वादा करता है, लेकिन जहाज बहुत कम
ospider

5
@ospider एक दैनिक आधार पर pipenv का उपयोग कर रहा है और आप और nurettin रिपोर्टिंग कर रहे हैं जैसे नकारात्मक मुद्दों का अनुभव नहीं कर रहे हैं। पिपेनव संस्करण 2018.10.13 के साथ काम करना। सभी पहलुओं में टूटा हुआ एक बहुत ही खाली बयान है।
क्वाइट

1
@Kwuite मैं आपके अंतिम वाक्य की भावना साझा करता हूं। जब कोई टिप्पणी अभी तक खाली नहीं है, तो इसमें संलग्न होने के लिए बहुत कम संवाद है।
क्रिश्चियन एबट

3
Nurettin और ospider से सहमत हैं। पिपेनव भयानक है।
एंड्रयू पामर

3

यदि आपकी आवश्यकता को एक ही मशीन पर वातावरण के बीच स्विच करने में सक्षम होना है, तो आपके द्वारा स्विच किए जाने वाले प्रत्येक वातावरण के लिए अलग-अलग वर्चुअन फ़ोल्डर बनाना आवश्यक हो सकता है।

python3 -m venv venv_dev
source venv_dev/bin/activate
pip install -r pip/common.txt
pip install -r pip/dev.txt
exit
python3 -m venv venv_prod
source venv_prod/bin/activate
pip install -r pip/common.txt
exit
source venv_dev/bin/activate
# now we are in dev environment so your code editor and build systems will work.

# let's install a new dev package:
# pip install awesome
# pip freeze -r pip/temp.txt
# find that package, put it into pip/dev.txt
# rm pip/temp.txt

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