2014-09-29 17 views
8

किसी दिए गए conda पैकेज के लिए, मैं उस पैकेज पर कैसे सूचीबद्ध करूं?कोंडा पैकेज आश्रितों की पहचान कैसे करें?

मैंने हाल ही में एक विश्वविद्यालय क्लस्टर पर एनाकोंडा स्थापित किया है जिसमें पहले से ही एमपीआई (ओपनएमपीआई) का संस्करण था। mpich2 पैकेज और mpi4py एनाकोंडा के साथ स्थापित संकुल mpi4py के डेमो के लिए ठीक थे, लेकिन mpi* कंपाइलर्स (mpicc, आदि) compatable नहीं थे। तो मैं conda remove 'डी mpich2 और mpi4py और स्थानीय एमपीआई इंस्टॉल और कंपाइलर्स का उपयोग करके mpi4py स्थापित करने के लिए pip का उपयोग किया।

मुझे mpi4py की निर्भरताओं और फिर mpich2 के आश्रितों को खोजने के लिए चारों ओर खोदना पड़ा, जिसके लिए मैंने केवल mpi4py की पहचान की। क्या mpich2 पर निर्भर करता है यह जानने के लिए एक "आसान" तरीका है?

+0

एमपीआईआई के बारे में आपकी कहानी को समझने के लिए आवश्यक है, या आपका उद्घाटन वाक्य इसे कवर करता है? – duozmo

+3

@duozmo मुझे लगता है कि उद्घाटन कथन इसे कवर करता है, लेकिन अगर मैं सही सवाल नहीं पूछ रहा हूं तो मैं आमतौर पर अपने सवालों के संदर्भ देना चाहता हूं। – Yann

+0

संदर्भ प्रदान करने के लिए कोई आपत्ति नहीं है।यह सिर्फ एक काफी शामिल परिदृश्य है और मैं यह पता लगाने की कोशिश कर रहा था कि क्या हमारे पास एक ही प्रश्न था (आपका उद्घाटन वाक्य)। – duozmo

उत्तर

5

पैकेज कैश खोजना केवल आपको वह संकुल दिखाएगा जो आपने पहले से डाउनलोड किया है। आपके मामले के लिए, यह व्यवहार ठीक है, लेकिन यदि आप किसी दिए गए पैकेज पर निर्भर प्रत्येक पैकेज को जानना चाहते हैं, तो बेहतर तरीके से अपने चैनलों के रिपोडाटा को खोजना बेहतर तरीका है। रिपोडाटा ~/anaconda/pkgs/cache में कैश किया गया है, या आप अपने ब्राउज़र के साथ http://repo.continuum.io/pkgs/free/ पर नेविगेट कर सकते हैं और आपके द्वारा उपयोग किए जाने वाले प्लेटफ़ॉर्म के लिए repodata.json पर क्लिक करें (Binstar के लिए, उदाहरण के लिए, उदाहरण के लिए, https://conda.binstar.org/asmeurer)। फिर "निर्भर करता है" कुंजी में पैकेज के नाम की खोज करें।

+1

यह जानकारी ऑनलाइन आसानी से सुलभ होने के लिए अच्छा होगा। – astrojuanlu

16

conda info आपको निर्देशिका (या निर्देशिका) बताएगा जहां आपका package cache स्थित है। इन निर्देशिकाओं में प्रत्येक पैकेज के लिए एक अद्वितीय निर्देशिका होती है, और प्रत्येक पैकेज निर्देशिका में info निर्देशिका होती है और index.json नामक फ़ाइल होती है। इन फ़ाइलों में से प्रत्येक में requires फ़ील्ड है जो conda निर्भरताओं की सूची को संदर्भित करता है। तो संक्षेप में, आपको इन फ़ाइलों को उस पैकेज के लिए खोजना होगा जिसे आप निकालने का प्रयास कर रहे हैं।

उदाहरण के लिए, anaconda की अपनी होम निर्देशिका में स्थापित है, और इसलिए पैकेज कैश ~/anaconda/pkgs है, mpich2 खोजने के लिए के आश्रितों अगर, मैं करूंगा:

grep mpich2 ~/anaconda/pkgs/*/info/index.json 

आप anaconda के लिए 2 लाइनों देखेंगे पैकेज, क्योंकि mpich2 उपरोक्त requires सूची में और depends नामक एक सूची में दोनों है। आपको प्रत्येक mpich2 पैकेज के लिए एक पंक्ति भी दिखाई देगी, क्योंकि प्रत्येक पैकेज के लिए name फ़ील्ड भी है। फिर आपको प्रत्येक पैकेज के लिए एक या अधिक पंक्तियां दिखाई देगी, जिस पर निर्भर करता है, mpich2 की आवश्यकता है। मेरी खोज ने केवल mpi4py का उत्पादन किया।

अब मैंने सोचा था कि आप --dry-run हटा सकते हैं, लेकिन ऐसा लगता है कि remove आश्रितों को नहीं हटाता है, इसलिए कुछ विशेष सूचीबद्ध नहीं है।

तो grep उपलब्ध नहीं है, तो मुझे यकीन है कि आप, एक ही बात करने के लिए एक अजगर स्क्रिप्ट बना सकता है glob मॉड्यूल का कहना है और हो सकता है json खोज करने के लिए उपयोग कर रहा हूँ।

संबंधित मुद्दे