डीवीसी में कोई पाइपलाइन को परिभाषित कर सकता है। यूनिक्स में, कोई आम तौर पर रूट स्तर पर काम नहीं करता है। इसके अलावा, डीवीसी को उम्मीद है कि फाइलें गिट रिपॉजिटरी के अंदर होंगी।
तो, यह एक सामान्य समस्या की तरह लगता है।
मान लीजिए मेरे पास निम्नलिखित है:
/home/user/project/content-folder/data/data-type/cfg.json
/home/user/project/content-folder/app/foo.py
गिट /home/user/project/
से शुरू होता है
cd ~/project/content-folder/data/data-type
../../app/foo.py do-this --with cfg.json --dest $(pwd)
मेरे लिए उचित लगता है: स्क्रिप्ट एक कॉन्फ़िगरेशन लेती है, जो किसी विशेष स्थान पर संग्रहीत होती है, इसे कुछ encapsulated कार्यक्षमता के विरुद्ध चलाती है, और इसे एक पूर्ण पथ का उपयोग करके गंतव्य पर आउटपुट करती है।
--dest
का डिफ़ॉल्ट व्यवहार वर्तमान कार्यशील निर्देशिका में आउटपुट करना है। यह एक और उचित डिफ़ॉल्ट की तरह लगता है।
इसके बाद, मैं dvc
के लिए params.yaml
फ़ाइल को कॉन्फ़िगर करने के लिए जाता हूं, और मैं तुरंत भ्रमित और अनिश्चित हूं कि क्या होने वाला है। लिखता हूँ:
foodoo:
params: do-this --with ????/cfg.json --dest ????
मैं क्या लिखना चाहता हूं (और एक शेल स्क्रिप्ट में होगा):
#!/usr/bin/env bash
origin:=$(git rev-parse --show-toplevel)
verb=do-this
params=--with $(origin)/content-folder/data/data-type/cfg.json --dest $(origin)/content-folder/data/data-type
लेकिन, डीवीसी में, पाथिंग निहित प्रतीत होता है, और मुझे नहीं पता कि कहां से शुरू किया जाए:
- DVC स्थानीय रूप से मेरी स्क्रिप्ट के पथ की गणना करेगा
- स्थानीय रूप से मेरी स्क्रिप्ट के पथ की गणना न करें
जो ठीक है -- मैं उसका पता लगा सकता हूँ। लेकिन मुझे पूरा यकीन है कि डीवीसी मेरी परियोजना के पथ के साथ मेरे params.yaml में निर्देशिका और फ़ाइल पैरा को बिल्कुल उपसर्ग नहीं करेगा।
कोई पथ नियंत्रण कैसे प्राप्त करता है जो एक निश्चित परियोजना स्थान ग्रहण नहीं करता है, जैसे मैं बाश में करता हूं?
1 उत्तर
डिफ़ॉल्ट रूप से, DVC आपके स्टेज कमांड को उसी निर्देशिका से चलाएगा जैसे dvc .yaml फ़ाइल। यदि आपको किसी भिन्न स्थान से कमांड चलाने की आवश्यकता है, तो आप wdir
के माध्यम से एक वैकल्पिक कार्यशील निर्देशिका निर्दिष्ट कर सकते हैं, जो dvc.yaml
के स्थान के सापेक्ष पथ होना चाहिए।
आपके चरण में अन्य सभी चीज़ों के लिए पथ (जैसे params.yaml
) को wdir
के सापेक्ष निर्दिष्ट किया जाना चाहिए (या wdir
प्रदान नहीं किए जाने पर dvc.yaml
के सापेक्ष)।
आपके उदाहरण को देखते हुए, डीवीसी में मापदंडों पर भी कुछ भ्रम है। DVC चरण में, params
पैरामीटर निर्भरता निर्दिष्ट करने के लिए है, जिसका उपयोग नहीं किया जाता है कमांड लाइन झंडे निर्दिष्ट करने के लिए। झंडे/विकल्पों सहित पूरे आदेश को आपके मंच के लिए cmd
अनुभाग में शामिल किया जाना चाहिए। यदि आप यह सुनिश्चित करना चाहते हैं कि आपके चरण को हर बार cfg.json
में कुछ मान बदलने पर फिर से चलाया जाए, तो आपके चरण का params
अनुभाग कुछ ऐसा दिखाई देगा:
params:
<relpath from dvc.yaml>/cfg.json:
- param1
- param2
...
तो आपका उदाहरण dvc.yaml
कुछ इस तरह दिखेगा:
stages:
foodoo:
cmd: <relpath from dvc.yaml>/foo.py do-this --with <relpath from dvc.yaml>/cfg.json --dest <relpath from dvc.yaml>/...
deps:
<relpath from dvc.yaml>/foo.py
params:
<relpath from dvc.yaml>/cfg.json:
...
...
यह कमांड dvc repro
को आपके चरण को किसी भी समय फिर से चलाएगा जब foo.py में कोड बदल गया है, या cfg.json
में निर्दिष्ट पैरामीटर बदल गए हैं।
आप dvc रन के लिए डॉक्स भी देख सकते हैं, जो हो सकता है dvc.yaml
स्टेज को जेनरेट या अपडेट करने के लिए इस्तेमाल किया जाता है (dvc.yaml
को हाथ से लिखने के बजाय)
संबंधित सवाल
नए सवाल
git
Git एक ओपन-सोर्स वितरित संस्करण नियंत्रण प्रणाली (DVCS) है। Git उपयोग और वर्कफ़्लो से संबंधित प्रश्नों के लिए इस टैग का उपयोग करें। जीआईटी-संबंधित मुद्दों के लिए [github] टैग का उपयोग केवल इसलिए न करें क्योंकि GitHub पर एक रिपॉजिटरी को होस्ट किया जाना है। इसके अलावा, सामान्य प्रोग्रामिंग प्रश्नों के लिए इस टैग का उपयोग न करें जो कि Git रिपॉजिटरी को शामिल करने के लिए होता है।