2013-07-03 5 views
5

तृतीय-पक्ष पायथन पैकेज स्थापित करने के लिए मैंने एक setup.py स्क्रिप्ट का उपयोग किया है जो संकुल का एक समूह स्थापित करने के लिए setuptools.setup() का उपयोग करता है। स्थापना के बाद मैं इन पैकेजों को /usr/local/lib/python2.7/dist-packages के अंतर्गत और /usr/lib/python2.7/site-packages के अंतर्गत एक मशीन पर पा सकता हूं।पायथन पुस्तकालय स्थापना पथ कैसे ढूंढें?

अब मैं एक पायथन स्क्रिप्ट लिखना चाहता हूं जो पता लगाता है कि तीसरे पक्ष के पैकेज कहां स्थापित किए गए हैं। मैं उसे कैसे कर सकता हूँ?

1) sys.prefix = sys.exec_prefix दोनों मशीनों "/ usr" पर है।

2) पायथन निष्पादन योग्य मशीनों/यूएसआर/बिन/पायथन दोनों पर है।

3) distutils.sysconfig.get_python_lib() एक मशीन पर /usr/lib/python2.7/site-packages पर /usr/lib/python2.7/dist-packages ("स्थानीय" गायब है) दूसरी मशीन

उत्तर

0

मुझे पायथन में ऐसा करने के लिए एक अच्छा तरीका नहीं पता है (किसी दिए गए रूट से निर्देशिका को क्रॉल करने के अलावा os.walk का उपयोग कर फ़ाइल देखने के लिए)। यदि आपको पायथन में ऐसा करने के लिए कोई बेहतर उत्तर नहीं मिलता है तो आप लाइब्रेन से अपने ओएस पर एक कमांड निष्पादित करने के लिए एक लाइब्रेरी/यूनिक्स खोज कमांड को निष्पादित करने के लिए एक कमांड निष्पादित कर सकते हैं। ऐसा करने के लिए आप subprocess module का उपयोग कर सकते हैं।

+0

मैं निर्देशिका पेड़ खोजने से अधिक "सुरुचिपूर्ण" समाधान पसंद करूंगा। Setuptools कैसे पता चलता है कि स्थापित करने के लिए कहां स्थापित करें? – user2539266

+0

बिंदु यह है कि यदि आप डिफ़ॉल्ट निर्देशिका को स्थापित करने के लिए एक ही विधि का उपयोग कर सकते हैं, तो यह उन परिदृश्यों की अनुमति नहीं देगा जहां उपयोगकर्ता ने डिफ़ॉल्ट का उपयोग नहीं किया है। मुझे किसी अन्य तरीके से पता नहीं है, लेकिन यह देखने में दिलचस्पी होगी कि अन्य सुझाव क्या हैं। – ChrisProsser

4

संकुल पहले से ही स्थापित किया गया है, तो आप सिर्फ उन्हें आयात कर सकता है, और उनके __file__ संपत्ति पर गौर:

>>> import mymodule 
>>> print mymodule.__file__ 
'/path/to/mymodule.py' 
+0

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

+0

यह मेरे उत्तर प्राप्त करने के लिए उपयोगी था। –

1

लगभग इस समस्या का समाधान मिल गया। मैं this question और this question पर वापस आ गया, इसलिए वहां दिए गए उत्तरों के लिए धन्यवाद।

सबसे पहले आपको एक सूची में सभी स्थापित मॉड्यूल की एक सूची प्राप्त करने की आवश्यकता होगी। solution to this question के आउटपुट को कैप्चर करने के लिए this question का उपयोग करें।

अब आपके पास सभी स्थापित पायथन मॉड्यूल की एक सूची है। आपको सूची के प्रारूप को देखने की आवश्यकता होगी और फिर मॉड्यूल के नाम के रूप में व्यक्तिगत तत्व प्राप्त करने के लिए इसे ठीक से प्रारूपित करना होगा।

फिर आप here समझाए गए तारों के रूप में उनके नाम से मॉड्यूल आयात कर सकते हैं। फिर एलेजेंड्रो ने पहले ही कहा है कि mymodule.__file__ पथ हैं।

यह एक समाधान है जो काम करना चाहिए। नहीं बहुत सुंदर है, लेकिन मैं सिर्फ एक अजगर शुरुआत जो अजगर


से गूगल खोज पर बेहतर मैं खोजने के लिए जहां मॉड्यूल हैं एक बहुत आसान रास्ता मिल गया है हूँ। यह ओपी की तलाश में "सुंदर" समाधान हो सकता है।

import sys 
print sys.path 

अजगर डॉक्स से के बारे में sys modulesys.path

स्ट्रिंग की एक सूची है कि मॉड्यूल के लिए खोज पथ को निर्दिष्ट होता है। पर्यावरण चर PYTHONPATH से शुरू किया गया, साथ ही एक स्थापना-निर्भर डिफ़ॉल्ट।

my_name = "mypackage" 
def _post_install(): 
    def find_module_path(): 
     for p in sys.path: 
      if os.path.isdir(p): 
       for f in os.listdir(p): 
        if f == my_name: 
         return os.path.join(p, f) 
    install_path = find_module_path() 
    # do something we the install_path 

नोट::

+0

मुझे यह नहीं पता कि यह देखने के लिए संभावित निर्देशिका क्या हैं। यह/usr या/usr/स्थानीय या एक निजी पायथन स्थापना हो सकती है, यह dist-packages या साइट-संकुल हो सकती है। Setuptools कैसे पता चलता है कि स्थापित करने के लिए कहां स्थापित करें? – user2539266

+0

@ user2539266 उत्तर अपडेट किया गया। एक नज़र देख लो। –

0

मैं sys.path के माध्यम से मेरी स्थापना रास्ता मिल गया यह काम करता है के बाद पैकेज setuptools द्वारा पंजीकृत किया गया है, और आप शायद भी अगर पैकेज कई में स्थापित किया गया है संभाल करने के लिए है sys.path के भीतर निर्देशिकाएं।

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