2013-05-12 10 views
14

मेरे पास एक पैकेज (एक टूलकिट का एक प्रकार) में कई मॉड्यूल हैं, जिनका उपयोग मैं अपनी परियोजनाओं में करता हूं। संरचना इस तरह दिखता है:मॉड्यूल आयात करते समय बाहरी मॉड्यूल छुपाएं (उदाहरण के लिए कोड-पूर्णता के संबंध में)

the_toolkit: 
    __init__.py 
    basic_io.py 
    simple_math.py 
    matrix_kit.py 
    ... 

अब जब मैं IPython या साथ

from the_toolkit import matrix_kit 

मैं मॉड्यूल का एक समूह कार्य करता है जो matrix_kit.py आयात मिल/पैकेज से एक मॉड्यूल आयात करने के बाद VIM में कोड पूर्णता का उपयोग (array, math, log, loggin, format_exc, आदि), वास्तविक कार्यों के साथ matrix_kit परिभाषित करता है। मैं अन्य सभी चीज़ों को कैसे फ़िल्टर कर सकता हूं, क्योंकि मॉड्यूल के कोड समापन में मुझे math या array में रुचि नहीं है?

__init__.py कई पायथनिस्टों द्वारा सुझाए गए अनुसार खाली है, या यह ऐसा करने का तरीका है?

+0

http://stackoverflow.com/a/19757025/1834164 देखें जो बताता है कि '__all__' का उपयोग ipython में मॉड्यूल को छिपाने के लिए कैसे किया जा सकता है। – user1834164

उत्तर

15

से बाहर कुछ लाभ मिलता है, और मेरे सभी आयात के लिए रेखांकित एक अग्रणी जोड़कर इसे हल कर सकते हैं। यह शानदार दिखता नहीं है, लेकिन यह आपके द्वारा प्राप्त किए जाने वाले कार्यों को प्राप्त करता है।

from __future__ import division as _division 
import numpy as _np 
import pandas as _pd 

केवल सामान है कि एक अंडरस्कोर के बिना शुरू होता है आयात किया जाता है जब आप से .. आयात * का उपयोग कर मॉड्यूल आयात करते हैं। या जब आप आईपीथॉन या स्पाइडर में टैब-पूर्णता का उपयोग करते हैं।

+0

यह एक अच्छा कामकाज की तरह लगता है, धन्यवाद! – tamasgal

0

आप मैं एक ही समस्या थी __all__

+1

क्या आप अधिक विशिष्ट हो सकते हैं? क्या मुझे पैकेज के भीतर अपने सभी मॉड्यूल में '__all__' जोड़ना चाहिए और उन कार्यों को सूचीबद्ध करना चाहिए जो महत्वपूर्ण हैं? (* आयात * चींटी, हाहा) – tamasgal

+0

@ सेकेंड: क्या आपने मॉड्यूल में '__all__' को परिभाषित करने का प्रयास किया था, फिर आईपीथन में मॉड्यूल आयात नहीं किया (स्टार आयात नहीं कर रहा है)? –

+0

मैं '*' का उपयोग नहीं करता और मैंने मॉड्यूल में '__all__' जोड़ने का प्रयास किया, लेकिन यह समस्या का समाधान नहीं करता है। – tamasgal

3

मैं इस दृष्टिकोण को पसंद और उपयोग करने आया हूं। अपनी परियोजना संरचना से शुरू करते हुए, हम matrix_kit की सभी सामग्री को छिपाएंगे जिन्हें आप दिखाना नहीं चाहते हैं। मॉड्यूल के नाम की शुरुआत में

the_toolkit: 
    __init__.py 
    basic_io.py 
    simple_math.py 
    matrix_kit.py 
    ... 

ही नाम के साथ एक पैकेज में ले जाएँ matrix_kit.py, और जगह एक अंडरस्कोर:

the_toolkit: 
    __init__.py 
    basic_io.py 
    simple_math.py 
    matrix_kit: 
     __init__.py 
     _matrix_kit.py 
    ... 

अब _matrix_kit.py में एक वैश्विक चर __all__ = [...] के नामों की सूची जोड़ने सभी फ़ंक्शंस/क्लासेस/वैरिएबल जिन्हें आप दिखाना चाहते हैं।

from ._matrix_kit import * 

यह केवल मॉड्यूल के __all__ विशेषता में सूचीबद्ध सामान आयात करेगा: फिर matrix_kit/init में इस लाइन को जोड़ने के .py। फिर, matrix_kit आयात करते समय आपने पहले किया है, तो आप वास्तव में __init__.py और इसकी सामग्री आयात करेंगे।

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