software - python tutorial pdf
एक अलग फ़ोल्डर से आयात करने के लिए पाइथन नहीं मिल सकता है (5)
मुझे एक उपफोल्डर में मॉड्यूल आयात करने के लिए पाइथन नहीं मिल रहा है। जब मैं आयातित मॉड्यूल से कक्षा का उदाहरण बनाने का प्रयास करता हूं तो मुझे त्रुटि मिलती है, लेकिन आयात स्वयं सफल होता है। यहां मेरी निर्देशिका संरचना है:
Server
-server.py
-Models
--user.py
Server.py की सामग्री यहां दी गई है:
from sys import path
from os import getcwd
path.append(getcwd() + "\\models") #Yes, i'm on windows
print path
import user
u=user.User() #error on this line
और user.py:
class User(Entity):
using_options(tablename='users')
username = Field(String(15))
password = Field(String(64))
email = Field(String(50))
status = Field(Integer)
created = Field(DateTime)
त्रुटि यह है: विशेषता त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'उपयोगकर्ता'
आयात उपयोगकर्ता
u = user.User () # इस लाइन पर आतंक
उपरोक्त वर्णित __init__ की कमी के कारण, आप एक आयातकर्ता की अपेक्षा करेंगे जो समस्या को स्पष्ट करेगी।
आपको एक नहीं मिलता है क्योंकि 'लाइब्रेरी' मानक लाइब्रेरी में एक मौजूदा मॉड्यूल भी है। आपका आयात विवरण उसको पकड़ लेता है और इसके अंदर उपयोगकर्ता वर्ग को खोजने का प्रयास करता है; यह अस्तित्व में नहीं है और केवल तभी आपको त्रुटि मिलती है।
आम तौर पर अपना आयात पूर्ण करना एक अच्छा विचार है:
import Server.Models.user
इस तरह की अस्पष्टता से बचने के लिए। वास्तव में पायथन 2.7 'आयात उपयोगकर्ता' से वर्तमान मॉड्यूल के सापेक्ष नहीं दिखेंगे।
यदि आप वास्तव में सापेक्ष आयात चाहते हैं, तो आप उन्हें कुछ हद तक बदसूरत वाक्यविन्यास का उपयोग करके पायथन 2.5 और ऊपर स्पष्ट रूप से प्राप्त कर सकते हैं:
from .user import User
आप os.path.dirname
.... आदेश पैरामीटर कैसे लिखते हैं?
import os, sys
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(CURRENT_DIR))
जब आपके पास मानक पैकेज संरचना नहीं है, तो मूल फ़ोल्डर पर स्थित मॉड्यूल आयात करने का सही तरीका यह है:
import os, sys
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(CURRENT_DIR))
(आप पिछले दो लाइनों को मर्ज कर सकते हैं लेकिन इस तरह समझना आसान है)।
यह समाधान क्रॉस-प्लेटफॉर्म है और अन्य परिस्थितियों में संशोधित करने की आवश्यकता के लिए पर्याप्त सामान्य है।
मेरा मानना है कि आपको मॉडल निर्देशिका में __init__.py
नामक फ़ाइल बनाने की आवश्यकता है ताकि पायथन इसे मॉड्यूल के रूप में मान सके।
फिर आप कर सकते हैं:
from Models.user import User
आप __init__.py
में कोड शामिल कर सकते हैं (उदाहरण के लिए प्रारंभिक कोड जो कुछ अलग वर्गों की आवश्यकता है) या इसे खाली छोड़ दें। लेकिन यह वहां होना चाहिए।