यदि गिडो ने स्वयं घोषणा की कि रिवर्स डोमेन सम्मेलन का पालन किया जाना चाहिए, तो इसे अपनाया नहीं जाएगा, जब तक कि पाइथन में import
के कार्यान्वयन में महत्वपूर्ण बदलाव न हों।
विचार करें: पायथन एक असफल-एल्गोरिदम के साथ रन-टाइम पर एक आयात पथ की खोज करता है; जावा संकलन-समय और रन-टाइम दोनों में एक संपूर्ण एल्गोरिदम के साथ पथ खोजता है। आगे बढ़ो, इस तरह से अपनी निर्देशिका की व्यवस्था का प्रयास करें:
folder_on_path/
com/
__init__.py
domain1/
module.py
__init__.py
other_folder_on_path/
com/
__init__.py
domain2/
module.py
__init__.py
फिर प्रयास करें:
from com.domain1 import module
from com.domain2 import module
वास्तव में उन बयानों में से एक सफल होगा। क्यूं कर? क्योंकि folder_on_path
या other_folder_on_path
खोज पथ पर अधिक आता है। जब पायथन from com.
देखता है तो यह पहले com
पैकेज को पकड़ सकता है। यदि इसमें domain1
शामिल होता है, तो पहले import
सफल होंगे; यदि नहीं, तो यह ImportError
फेंकता है और छोड़ देता है। क्यूं कर? क्योंकि import
रनटाइम पर होना चाहिए, संभावित रूप से कोड के प्रवाह में किसी भी बिंदु पर (हालांकि अक्सर शुरुआत में)। कोई भी उस बिंदु पर एक विस्तृत पेड़-चलना चाहता है ताकि यह सत्यापित किया जा सके कि कोई संभावित मिलान नहीं है। यह मानता है कि अगर इसे com
नामक एक पैकेज मिल जाता है, तो यह com
पैकेज है।
इसके अलावा, अजगर निम्नलिखित बयानों बीच भेद नहीं करता:
from com import domain1
from com.domain1 import module
from com.domain1.module import variable
सत्यापित करते हुए com
है com
प्रत्येक मामले में अलग होने जा रहा है की अवधारणा। जावा में, आपको वास्तव में केवल दूसरे मामले से निपटना होगा, और यह फ़ाइल सिस्टम के माध्यम से चलकर पूरा किया जा सकता है (मुझे लगता है कि नामकरण कक्षाओं का एक फायदा और फाइलें समान हैं)। पायथन में, यदि आपने फ़ाइल सिस्टम सहायता के अलावा कुछ भी आयात करने की कोशिश की है, तो पहला मामला पारदर्शी रूप से (init .py नहीं चलाया जा सकता है), दूसरा मामला पूरा हो सकता है, लेकिन आप हार जाएंगे module.py का प्रारंभिक चल रहा है, लेकिन तीसरा मामला पूरी तरह से अटूट है। कोड उपलब्ध होने के लिए variable
के लिए निष्पादित करना होगा। और यह एक और मुख्य बिंदु है: import
संकल्प नामस्थान से अधिक करता है, यह कोड निष्पादित करता है।
अब, आप इस के साथ दूर हो सकता है कि हर अजगर पैकेज कभी वितरित एक अधिष्ठापन प्रक्रिया है कि com
फ़ोल्डर के लिए खोज की है, और फिर domain
आवश्यक है, और इतने पर और इतने पर है, लेकिन इस पैकेजिंग काफी कठिन करता है तो ड्रैग-एंड-ड्रॉप क्षमता को नष्ट कर देता है, और पैकेजिंग और ऑल-आउट उपद्रव बनाता है।
com.domain1 आयात मॉड्यूल से d1m # आदि –
विभिन्न पथ-निर्देशिकाओं में एकाधिक 'कॉम' पैकेजों के बारे में अच्छी बात - मैं केवल एक ही मूल पैकेज साझा करने में समस्याओं पर विचार कर रहा हूं, लेकिन उसी नाम के अलग-अलग पैकेज इससे भी बदतर है। –
जावा निर्देशिका संरचना का उपयोग करके, केवल संकलन समय पर, रनटाइम पर कक्षाओं की खोज करता है। यह गतिशील रूप से जुड़ा हुआ है। – Marian