2013-03-05 2 views
12

मैं प्रत्येक छात्र के लिए अलग-अलग फ़ोल्डर्स में कुछ पायथन सबमिशन ग्रेड करने का प्रयास कर रहा हूं। ऐसा करने के लिए, एक फ़ंक्शन है, f() कहें जिसे मैं चलाने के लिए चाहता हूं। मैं समझता हूँ कि अगर मेरे वर्तमान पथ एक जहाँ फ़ाइल स्थित है के रूप में एक ही है, मैं बसउपफोल्डर्स से पाइथन आयात

import filename 
filename.f() 

कर सकते हैं हालांकि, वहाँ बेहतर तरीके हैं? उदाहरण के लिए, मान लीजिए कि निर्देशिका संरचना इस प्रकार है करते हैं:

main.py 
student/run_this.py 

मुझे पता है कि अगर वहाँ छात्र फ़ोल्डर में एक "__init__.py" फ़ाइल, मैं सिर्फ टाइप कर सकते हैं

import student.run_this 

हालांकि, उस फाइल के बिना, यह काम नहीं करता है।

कुछ इसी तरह के सवाल मैंने पाया

लेकिन इनमें से कोई भी विशेष रूप से संतोषजनक जवाब दे दी थी।

+0

तो '__init __। Py' फ़ाइल के साथ आपकी समस्या वास्तव में क्या है? – eazar001

+1

आप अपने पथ में 'छात्र' फ़ोल्डर जोड़ते हैं, फिर' run_this' आयात करें। यही अन्य जवाब आपको करने के लिए कहते हैं, आपने क्या प्रयास किया जो काम नहीं करता? –

+1

ऐसा नहीं है कि यह उतना काम नहीं करता जितना कि यह सुरुचिपूर्ण प्रतीत नहीं होता था। या कम से कम, \ __ init __ जोड़ना। Py मुझे बहुत ऑफपुटिंग लगता है - यह सबफ़ोल्डर तक पहुंचने के लिए फ़ाइल संरचना को संशोधित करने के लिए अनैतिक प्रतीत होता है। पथ बदलने के लिए, मैंने पढ़ा कि यह बुरा अभ्यास था, लेकिन यह एक उचित समाधान की तरह प्रतीत होता है। – vmkrish

उत्तर

8

एक __init__.py मॉड्यूल फ़ोल्डर student अंदर जो शामिल करना चाहिए

from . import * 

फिर आप के रूप में

import student.module.py 

इसके मूल फ़ोल्डर मॉड्यूल के लिए छात्र फ़ोल्डर से किसी भी मॉड्यूल कॉल कर सकते हैं आप किसी भी अन्य त्रुटियों पोस्ट करते हैं बनाने आप सामना कर रहे हैं, हम आगे मदद कर सकते हैं।

+1

क्या आपको लगता है कि आप समझा सकते हैं (या मुझे सामग्री से लिंक करें) समझाते हुए क्यों \ __ init __। Py की आवश्यकता है? यह काम खत्म हो गया, लेकिन मैं थोड़ा तर्कग्रस्त हूं कि डिजाइन तर्क – vmkrish

+0

\ _ \ _ init__.py सी ++ या पायथन में वर्ग विरासत तर्क के समान ही सरल है। जब पायथन एक फ़ोल्डर को देखता है तो इसमें उपलब्ध सभी मॉड्यूल शामिल नहीं होते हैं। यदि आप \ _ \ _ init__ फ़ंक्शन पर कक्षा में प्रवेश करते समय फ़ंक्शन को पूरा करने के लिए कार्य निर्दिष्ट करते हैं, तो यह अच्छी तरह से समझता है। यहां हम केवल आवश्यक या सभी मॉड्यूल आयात कर रहे हैं जब पायथन \ _ \ _ init__ का उपयोग कर फ़ोल्डर का सामना करता है। –

+0

यह उत्तर केवल यही है जो मुझे मिली समस्या का उत्तर देने के लिए मिल सकता है, धन्यवाद @ माथन कुमार! –

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