यह अजगर के किस संस्करण का उपयोग कर रहे पर निर्भर करता है। यदि आपका लक्षित पायथन संस्करण 2.4 या पुराना है (2015 में, मुझे यकीन है कि नहीं), तो हाँ यह खराब अभ्यास होगा क्योंकि दो मॉड्यूल को अलग करने के लिए कोई रास्ता नहीं है (हैक के बिना)।
हालांकि, पाइथन 2.5+ में, मुझे लगता है कि मानक lib मॉड्यूल नाम का उपयोग पैकेज नामस्थान में बिल्कुल ठीक है; वास्तव में, यह the spirit of PEP328 है।
चूंकि पाइथन की लाइब्रेरी फैलती है, अधिक से अधिक मौजूदा पैकेज आंतरिक मॉड्यूल अचानक दुर्घटना से मानक लाइब्रेरी मॉड्यूल छाया करते हैं। पैकेजों के अंदर यह एक विशेष रूप से कठिन समस्या है क्योंकि निर्दिष्ट करने का कोई तरीका नहीं है कि कौन सा मॉड्यूल मतलब है। अस्पष्टता को हल करने के लिए, यह प्रस्तावित किया जाता है कि foo हमेशा sys.path से पहुंचने योग्य मॉड्यूल या पैकेज होगा। इसे पूर्ण आयात कहा जाता है।
पायथन-देव समुदाय ने डिफ़ॉल्ट रूप से पूर्ण आयात का चयन किया क्योंकि वे अधिक आम उपयोग मामले हैं और क्योंकि पूर्ण आयात रिश्तेदार (इंट्रा-पैकेज) आयात की सभी कार्यक्षमता प्रदान कर सकते हैं - हालांकि कठिनाई की लागत पर पदानुक्रम में पैकेज टुकड़ों का नाम बदलना या एक पैकेज को दूसरे के अंदर ले जाना।
क्योंकि इस अर्थ विज्ञान में एक परिवर्तन का प्रतिनिधित्व करता है, पूर्ण आयात from __future__ import absolute_import
SWS.time
के उपयोग के माध्यम अजगर 2.5 और 2.6 में वैकल्पिक होगा स्पष्ट रूप से नहींtime
के रूप में और के एक पाठक के रूप में एक ही बात है कोड, मैं SWS.time
की अपेक्षा करता हूं न कि केवल time
का उपयोग करें, बल्कि इसे किसी भी तरीके से विस्तारित करने के लिए।
तो, अगर SWS.foo
जरूरतों SWS.time
आयात करने के लिए, तो यह निरपेक्ष पथ का उपयोग करना चाहिए:
# in SWS.foo
# I would suggest renaming *within*
# modules that use SWS.time so that
# readers of your code aren't confused
# with which time module you're using
from SWS import time as sws_time
या, यह Bakuriu के जवाब में के रूप में एक स्पष्ट रिश्तेदार आयात का उपयोग करना चाहिए:
# in SWS.foo
from . import time as sws_time
यदि आपको SWS.time
मॉड्यूल के भीतर मानक lib time
मॉड्यूल आयात करने की आवश्यकता है, तो आपको सबसे पहले भविष्य की सुविधा आयात करने की आवश्यकता होगी (केवल पायथन के लिए 2।5 +; अजगर 3 + डिफ़ॉल्ट रूप से करता):
# inside of SWS.time
from __future__ import absolute_import
import time
time.sleep(28800) # time for bed
नोट:from __future__ import absolute_imports
केवल मॉड्यूल है कि भविष्य सुविधा आयात किया जाता है भीतर आयात बयानों को प्रभावित करेगा और नहीं किसी अन्य मॉड्यूल (प्रभावित करेगा कि होगा के रूप में यदि कोई अन्य मॉड्यूल सापेक्ष आयात पर निर्भर करता है तो हानिकारक रहें)।
मुझे लगता है कि यह बहुत स्पष्ट है कि आपको मानक पायथन मॉड्यूल नामों का पुन: उपयोग नहीं करना चाहिए। यह सिर्फ परेशानी के लिए पूछ रहा है। – Cryptite
यह स्पष्ट क्यों है? devilsadvocate> – MikeWyatt
httplib/httplib2 और urllib/urllib2 को देखें। यह पुस्तकालयों की एक उग्र दुनिया के लिए बनाता है, लेकिन टकराव और अनिश्चित व्यवहार नाम देने के लिए यह बेहतर है। –