2011-02-02 10 views
5

मुझे पता है, मुझे पता है, यह गंदे और सब है। मैं जानना चाहता हूं कि पाइथन मॉड्यूल के __init__ मॉड्यूल को अपने आप से बदलने के लिए हाइजैक करना संभव है या नहीं।पाइथन में बंदर पैच __init__ मॉड्यूल कैसे करें?

मैं यह पूछ रहा हूं क्योंकि मुझे django lib को इसकी init प्रक्रिया के कुछ भाग को शुरू करने की आवश्यकता है जो इसे हमारे कॉन्फ़िगरेशन के साथ दुर्घटनाग्रस्त कर देता है।

और हाँ, django lib को ठीक करना और पैच वापस भेजना बेहतर है। हाँ, मैं इसके बारे में लेखक के संपर्क में हूं। लेकिन अभी के लिए, मुझे एक त्वरित फिक्स की जरूरत है।

+4

आपकी पसंद के लिए '__init __। Py' को संपादित करने के बारे में कैसे? यह सब सिर्फ सादा पाठ है –

उत्तर

0

आप बस __init__.py फ़ाइल संपादित कर सकते हैं। आपको रोकने के लिए कुछ भी नहीं है और यदि आप इसे सही करते हैं तो कुछ भी बुरा नहीं होगा।

+0

मैं टिप्पणी करने वाला था कि यह एक जवाब होना चाहिए। +1 –

+0

संदेह में, इसे हैक करें! – jathanism

+0

मैं बस मौजूदा बैकअप बैकअप लेता हूं और इसे संपादित करता हूं। – XORcist

4

आयात प्रक्रिया को हाइजैक करने का एक तरीका आयात करने के कुछ समय पहले आयात को अनुकरण करना है, एक अन्य मॉड्यूल में जिसे आप बंदर-पैच करना चाहते हैं उससे पहले आयात किया जाता है। कुंजी के रूप में मॉड्यूल के नाम के साथ sys.modules में जो कुछ भी आप चाहते हैं उसे डालें, और जब मूल मॉड्यूल आयात करने का समय आता है, तो पाइथन को sys.modules में एक प्रविष्टि मिल जाएगी और इसका उपयोग केवल उसमें किया जाएगा। अगर काम कुछ जादू तरीके से किया जाता है तो यह काम नहीं कर सकता है।

दूसरी ओर, आप हमेशा मूल प्रोजेक्ट की प्रतिलिपि बना सकते हैं और इसे अपनी पसंद के अनुसार पैच कर सकते हैं।

+0

+1 के साथ समाप्त हो गया लेकिन मैं ऐसा करने में विफल रहा। मैं नहीं देख सकता कि इसे कैसे ठीक से बदला जाए। यदि मैं मॉड्यूल dict में प्रविष्टि सेट करता हूं, तो मैं ohter submodules आयात नहीं कर सकता क्योंकि मेरा संस्करण एक ही निर्देशिका में नहीं है। –

+0

ठीक है, मैंने सोचा कि आपको submodules आयात करने में समस्या हो सकती है। आप मैन्युअल रूप से उन submodules को भी कोशिश और आयात कर सकते हैं, लेकिन मुझे यह करने का सबसे अच्छा तरीका नहीं है। एक आखिरी चीज जिसे आप कोशिश कर सकते हैं अस्थायी रूप से बंदर-किसी भी बाहरी कार्य/ग्लोबल्स/आदि को पैच करना है। सवाल में मॉड्यूल का उपयोग करता है। आखिरकार, यदि मॉड्यूल साइड इफेक्ट्स से जुड़े कुछ कर रहा है, तो शायद यह कुछ बाहरी कार्यों को कॉल कर रहा है या ग्लोबल्स को संशोधित कर रहा है। आयात से पहले पैचिंग करें और बाद में बंदर-पैच रीसेट करें, और आपको ठीक होना चाहिए। –

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