2017-05-18 11 views
5

https://docs.python.org/2/library/2to3.html#2to3fixer-import ध्यान दें कि:पायथन में भाई आयात क्या है?

भाई आयात का पता लगाता है और उन्हें रिश्तेदार आयात के लिए बदल देता है।

+0

मुझे खुशी है कि 2to3.py इस भाई आयात को ठीक कर सकता है जो वास्तव में संबंधित सापेक्ष आयात है। – acgtyrant

उत्तर

0
source code से

:

"""Fixer for import statements. 
If spam is being imported from the local directory, this import: 
    from spam import eggs 
Becomes: 
    from .spam import eggs 
And this import: 
    import spam 
Becomes: 
    from . import spam 
""" 

तो भाई "एक ही स्तर पर" के लिए खड़े हैं।

0

यह एक ही मूल निर्देशिका के अंतर्गत मॉड्यूल आयात करने के लिए संदर्भित करता है।

इस निर्देशिका संरचना में:

parent 
    module1 
     __init__.py 
     module1.py 
    module2 
     __init__.py 
     module2.py 

उदाहरण के लिए एक भाई आयात module2.py से module1 आयात करने का उल्लेख होगा।

1
"""Fixer for import statements. 
If spam is being imported from the local directory, this import: 
    from spam import eggs 
Becomes: 
    from .spam import eggs 
And this import: 
    import spam 
Becomes: 
    from . import spam 
""" 

यह स्थानीय

-- local path 
    -- a.py 
    -- b.py 
    -- __init__.py 


RefactoringTool: Refactored a.py 
--- a.py (original) 
+++ a.py (refactored) 
@@ -1,2 +1,2 @@ 
-import b 
-print 'xxx' 
+from . import b 
+print('xxx') 
RefactoringTool: Files that need to be modified: 
RefactoringTool: a.py 

विस्तार से जब आयात स्थानीय मॉड्यूल बदल जाएगा और एक __init__.py देखें: probably_a_local_import

1

सहोदर आयातनहीं एक टर्मिनस technicus है। बेहतर शब्द सापेक्ष आयात है।

+---+--------------------------+-------------------------+ 
| | In the File system | In the Python import | 
+---+--------------------------+-------------------------+ 
| 1 | /doc/excel    | doc.excel    | <--- absolute 
| 2 | excel (we are in /doc) | excel (we are in doc) | <--- ??? 
| 3 | ./excel (we are in /doc) | .excel (we are in doc) | <--- relative 
+---+--------------------------+-------------------------+ 

और यहाँ पर्याप्त अंतर है:

यह फाइल सिस्टम में लगभग एक ही रूप में रिश्तेदार पथ का मतलब है। फाइल सिस्टम में हम हमेशा पूर्ण पथ को पहचानते हैं क्योंकि यह / (या कुछ समान) से शुरू होता है, इसलिए पिछली तालिका में 2 और 3 के मामलों में समान अर्थ है।

अजगर में, मामला 2 का मतलब है: वर्तमान मॉड्यूल (doc में यानी), में excel के लिए खोज लेकिन अगर यह नहीं पाया जाता है, शीर्ष स्तर के मॉड्यूल के रूप में यह विचार करें। और यह समस्याएं पैदा कर सकता है।

केस 3 स्पष्ट है - प्रमुख . मतलब है रिश्तेदार पथ (मैं ई मॉड्यूल doc.excel।।)।

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