2013-07-18 20 views
5

Hiyerarşi:Python: büyükbaba dizinde İthalat dosyası

scripts/ 
    web/ 
     script1.py 
    tests/ 
     script2.py 
common/ 
    utils.py 

nasıl script1 ve script2 içinde utils'i içe ve hala ayrı olan komut dosyalarını çalıştırmak mümkün olacaktır (yani python script1.py). __init__.py dosyalarını nereye yerleştiririm ve bu konuda gitmenin doğru yolu bu mu? Teşekkür ederim!

cevap

6
package/ 
    __init__.py 
    scripts/ 
     web/ 
      __init__.py 
      script1.py 
     tests/ 
      __init__.py 
      script2.py 
    common/ 
     __init__.py 
     utils.py 

Paketinize boş bir grup __init__.py dosyası ekledim.

from package.common import utils 

veya eşdeğer:

import package.common.utils as utils 

burada olumsuz package nasılsa PYTHONPATH olması gerektiğidir Artık 2 seçenek var, sen mutlak ithalat kullanabilirsiniz. Diğer seçenek relative imports kullanmaktır:

from ....common import utils 

Genellikle bu yaklaşımı önüne geçecek ... Bu sadece şeyler nereden geldiğini söylemek çok zor olur (4 dönemleri ya da 6 olduğunu?).

+0

Göreceli içe aktarmayı kullanarak script1.py çalıştırmayı denediğimde, şu hatayı alıyorum: 'ValueError: Pakete bağlı olarak göreceli içe aktarma denemesi –

+0

Bunun nedeni, tek başına bir program olarak çalıştırdığınızda, python bir pakette olduğunu biliyorum ('__init __. py' dosyalarını takip ederek oraya ulaşmadı). Bu, daha açık sürümü tercih etmenin başka bir nedenidir. – mgilson

+0

Hmmm, bu yüzden mutlak ithalatı kullanmayı denedim ve şimdi modülü bulamıyor. PYTHONPATH'a ne yapmam gerekiyor? Teşekkürler! –