के साथ अनियमित पाइथन ऑब्जेक्ट्स मैं एक अन्य पायथन परियोजना में एक सहयोगी द्वारा निर्मित एक परियोजना Project A
को एकीकृत करने की कोशिश कर रहा हूं। अब इस सहयोगी अपने कोड में रिश्तेदार आयात इस्तेमाल नहीं किया, लेकिन इसके बजायएक बदले हुए मॉड्यूल पथ
from packageA.moduleA import ClassA
from packageA.moduleA import ClassB
किया और इसके परिणामस्वरूप cPickle
साथ कक्षाएं मसालेदार। स्वच्छता के लिए मैं अपने प्रोजेक्ट के अंदर निर्मित पैकेज (Project A
) पैकेज को छिपाना चाहता हूं। हालांकि यह packageA
में परिभाषित कक्षाओं के पथ को बदलता है। कोई बात नहीं, मैं सिर्फ
from ..packageA.moduleA import ClassA
from ..packageA.moduleA import ClassB
का उपयोग कर आयात लेकिन अब संयुक्त राष्ट्र अचार बनाने कक्षाएं निम्न संदेश के साथ विफल रहता है
with open(fname) as infile: self.clzA = cPickle.load(infile)
ImportError: No module named packageA.moduleA
तो क्यों जाहिरा तौर पर मॉड्यूल defs देख नहीं cPickle
है फिर से परिभाषित करेंगे। क्या मुझे सिस्टम पथ पर packageA
की रूट जोड़ने की आवश्यकता है? क्या समस्या को हल करने का यह सही तरीका है?
cPickled
फ़ाइल लग रहा है
ccopy_reg
_reconstructor
p1
(cpackageA.moduleA
ClassA
p2
c__builtin__
object
p3
NtRp4
पुराने प्रोजेक्ट पदानुक्रम की तरह कुछ प्रकार
packageA/
__init__.py
moduleA.py
moduleB.py
packageB/
__init__.py
moduleC.py
moduleD.py
मैं एक WrapperPackage
MyPackage/
.. __init__.py
.. myModuleX.py
.. myModuleY.py
WrapperPackage/
.. __init__.py
.. packageA/
.. __init__.py
.. moduleA.py
.. moduleB.py
.. packageB/
.. __init__.py
.. moduleC.py
.. moduleD.py
मैं इस समस्या KRunner के लिए एक प्लग-इन लिख बारे में जाना। प्लाज्मा द्वारा उपयोग किए गए स्क्रिप्ट इंजन ने एक नकली पैकेज बनाने के लिए पथ हुक का उपयोग किया जहां मेरा कोड था। दुर्भाग्यवश मुझे इसे हल करने का कोई तरीका नहीं मिला। एकमात्र चीज जो मैं कर सकता था वह था कि मैन्युअल रूप से अपने पथ हुक को हटा दें, 'sys' कैश साफ़ करें और सब कुछ पुनः आयात करें। लेकिन अगर आपके पास कुछ मसालेदार डेटा हैं तो आपको इसे उसी कक्षा के नाम से अनपिक करना होगा (जिसका अर्थ है कि आपको 'पैकेज से .m मॉड्यूलए आयात क्लास' रखना होगा)। ध्यान दें कि एक बार अनपिक्त होकर आप सही नाम का उपयोग कर उन्हें फिर से उठा सकते हैं। – Bakuriu