2011-01-23 14 views
5

सवाल अगर मैं इस तरह की एक src निर्देशिका सेटअप:बेसिक अजगर आयात

main.py 
pkg1: 
    __init__.py 
    util.py 
pkg2: 
    __init__.py 
    test.py 

तुम मुझे main.py से और test.py से pkg1.util आयात करने के लिए सबसे अच्छा तरीका बता सकते हैं?

धन्यवाद! (मैं रूट निर्देशिका में एक और __init__.py फ़ाइल है की जरूरत है, मुझे पता है?)

उत्तर

5

जब से तुम उल्लेख कि यह पायथन 3 है, आपको अपनी .py फ़ाइलों में निम्नलिखित जोड़ना नहीं है। मैं करूंगा अभी भी है क्योंकि यह पीछे की ओर पोर्टेबिलिटी में मदद करता है, तो कुछ गरीब घास जो अजगर 2 पर अटक गया है अपने कोड का उपयोग करने की जरूरत है: यह देखते हुए कि आप अजगर 3 का उपयोग कर रहे हैं, या आप अजगर 2 का उपयोग कर रहे है कि और भी शामिल है

from __future__ import absolute_import 

से main.py:

import pkg1.util as util 

test.py से आप दो तरीकों में से एक पर है कि क्या आप pkg1 और pkg2 पर विचार किया जाएगा आधार का प्रयोग करेंगे ऊपर लाइन, यहाँ अपने जवाब है चीजें जो हमेशा एक-दूसरे के संबंध में एक साथ तैनात होती हैं, या फिर वे हमेशा शीर्ष स्तर पर अर्ध-स्वतंत्र रूप से प्रत्येक तैनात किए जाएंगे। तो पहले आप इस करना होगा:

from ..pkg1 import util 

और अगर यह दूसरा विकल्प है, इस:

import pkg1.util as util 

यह निश्चित रूप से, तात्पर्य है कि आप हमेशा निर्देशिका से अजगर चल रहे हैं जो main.py में है, या वह निर्देशिका PYTHONPATH में है या किसी कारण से sys.path में समाप्त होती है (उदाहरण के लिए मुख्य पायथन साइट-पैकेज निर्देशिका होने की तरह)।

+0

यदि 'पीईपीएटीएच' में किसी कारण से अलग 'pkg1' मौजूद है, तो क्या मुझे अभी भी इन विकल्पों के साथ आयात किया गया * यह * pkg1' मिलेगा? –

+0

@aharon: कोई विकल्प नहीं है जो आपको वादा करता है कि आपको 'sys.path' के साथ गड़बड़ किए बिना इच्छित' pkg1' प्राप्त होगा, यह सुनिश्चित करने के लिए कि उचित निर्देशिका पथ में पहली बार है। इस तरह से विवादित पैकेज नाम होने के कारण एक बहुत बुरा विचार है जब तक कि आपके पास 'setuptools' जैसे पैकेज प्रबंधन सिस्टम नहीं है जो पैकेज को' नेमस्पेस पैकेज 'के रूप में प्रबंधित कर रहा है। – Omnifarious

+3

क्या सभी को एक ही निर्देशिका में '__init__py' की आवश्यकता नहीं होगी' main.py'? जैसा कि है, 'test.py' और' util.py' पूरी तरह से अलग संकुल में हैं जो एक सामान्य सुपरपैकेज का उप-पैकेज नहीं है। –

1
main.py से

:

import pkg1.util 

test.py से:

from ..pkg1 import util 
संबंधित मुद्दे