2010-11-15 15 views
21

Modül dizininin bir alt dizininde bazı kaynaklar kullanan bir Python modülüm var. yığın taşması üzerine civarında arama ve ilgili cevaplar bulduktan sonra, ben başka bir yerden modülü çağırdığınızda Bu iyi çalışırCWD değiştiğinde bir Python modülünde göreceli bir yolu nasıl kullanırım?

import os 
os.path.join(os.path.dirname(__file__), 'fonts/myfont.ttf') 

gibi bir şey kullanarak kaynaklara modülü yönlendirmek başardı ama modül çağırdığınızda kırılır Geçerli çalışma dizinini değiştirdikten sonra. Sorun __file__ içeriği dikkate Dizini değiştirdim gerçeğini almaz bir göreli yolu, olmalarıdır:

>>> mymodule.__file__ 
'mymodule/__init__.pyc' 
>>> os.chdir('..') 
>>> mymodule.__file__ 
'mymodule/__init__.pyc' 

ben __file__ mutlak yolunu kodlamak nasıl veya kısıtlama nasıl ki Mevcut çalışma dizini ne olursa olsun, kaynağımdaki kaynaklara erişebilir miyim? Teşekkürler!

cevap

39

Mağaza modülünün başında modül dizininin tam yol:

font_file = os.path.join(package_directory, 'fonts', 'myfont.ttf') 

Ve sonuçta

, yapma:

package_directory = os.path.dirname(os.path.abspath(__file__)) 

Daha sonra bu package_directory dayalı kaynaklarınızı yük Geçerli çalışma dizini gibi süreç çapında kaynakların değiştirilmesi. Çalışma dizinini iyi yazılmış bir programda değiştirmeye asla gerek yoktur, sonuç olarak os.chdir()'dan kaçının.

+0

Teşekkürler, bu mükemmel çalışıyor! Çalışma dizinini değiştirmekten kaçınmak için de dikkatinizi aklımda tutacağım. – jvkersch