मैं एक ऐप बना रहा हूं जो अपने अंडे प्लगइन्स को डाउनलोड और इंस्टॉल करता है, लेकिन मुझे आसानी से जगह निकालने के बाद अंडे लोड करने में समस्या होती है। इस तरह अब यह काम करता है:अंडे प्लगइन को आसान कैसे स्थापित करें और एप्लिकेशन को पुनरारंभ किए बिना लोड करें?
- अनुप्रयोग अस्थायी फ़ोल्डर में डाउनलोड अंडा
- ~/.app/plugins फ़ोल्डर (जिस पर एक PTH से बताया है में setuptools.command.easy_install.main() के साथ अंडा इंस्टॉल जिले-संकुल)
- इस बिंदु पर, ~/.apps/plugins/आसान install.pth नया अंडा पथ
समस्या यह है कि है PTH अजगर प्रक्रिया जब तक पुनः लोड नहीं कर रहा है के साथ अद्यतन किया जाता है पुनः लॉन्च किया गया है, जिसका अर्थ है कि ऐप को रोकना और पुनरारंभ करना है (ऐप एक लंबी चल रही प्रक्रिया है, और प्लगइन स्थापना आवश्यक है पुनरारंभ करने की आवश्यकता नहीं है)।
तो सवाल यह है कि या तो पीएच प्रोग्राम को स्वचालित रूप से फिर से लोड करना है ताकि प्लगइन एंट्री पॉइंट डिस्कवरी नए अंडे के लिए काम करे, या किसी भी तरह से आसानी से एन्डर स्थापित करने के रास्ते को वापस लौटाएं, इसलिए मैं मैन्युअल रूप से (pkg_resources के साथ) नई प्लगइन लोड करें?
मैं एक ऐसा फ़ंक्शन बना सकता हूं जो easy_install'ed पथ का अनुमान लगाने का प्रयास कर सके या स्वयं को पीठ पार्स कर सके, लेकिन यदि संभव हो तो मैं नहीं करना पसंद करता।
अजगर 2.6, setuptools 0.6c9
Marius Gedminas के लिए धन्यवाद, क्या अब मैं मूल रूप से कर रहा हूँ है:
dist = pkg_resources.get_distribution(plugin_name)
entry = dist.get_entry_info(entry_point_name, plugin_name)
plugin = entry.load()
मुझे setuptools के बारे में बहुत कुछ पता नहीं है, लेकिन क्या आपने 'पुनः लोड' फ़ंक्शन का प्रयास किया है? [डॉक्स] (http://docs.python.org/library/functions.html#reload) या http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python- मॉड्यूल ? – cji
हाँ मैंने किया, लेकिन पुनः लोड पर्याप्त नहीं है। मैंने साइट मॉड्यूल को पुनः लोड करने का प्रयास किया (जो मुझे लगता है कि पीएच पढ़ने के लिए ज़िम्मेदार है) लेकिन उसने कुछ भी नहीं किया। यहां तक कि site.addsitedir (os.path.expanduser ('~/.app/plugins')), जो sys.path सूची में नया अंडा जोड़ना प्रतीत होता है, इसे आयात करने योग्य (आयात प्लगइन_नाम) या खोजने योग्य बनाने के लिए पर्याप्त नहीं है pkg_resources के लिए। – lkraider
zc.buildout ऐसा कुछ करता है, हालांकि मैं इसके स्रोत कोड को पढ़ने का प्रयास नहीं करना चाहता हूं। क्या आपने distutils-sig मेलिंग सूची पर पूछने की कोशिश की है? –