Python 2.5 çalıştırıyorum.
Bu benim klasör ağacım:
ptdraft/
nib.py
simulations/
life/
life.py
(Ayrıca her klasörde __init__.py
var, okunabilirlik için burada atlandı)
nibmodülünü
life` modülünün içinden nasıl içe aktarabilirim? sys.path ile uğraşmadan bunu yapmanın mümkün olduğunu umuyorum.
Not: Çalıştırılan ana modül ptdraft
klasöründedir.
Göreceli içe aktarımları kullanabilirsiniz (python >= 2.5):
from ... import nib
(Python 2.5'teki Yenilikler) PEP 328: Mutlak ve Göreceli İçe Aktarmalar
EDIT: iki paket yukarı çıkmak için başka bir nokta '.' eklendi
Görünüşe göre sorun modülün bir üst dizinde olmasıyla ya da buna benzer bir şeyle ilgili değil.
PYTHONPATHe
ptdraft` içeren dizini eklemeniz gerekir
import nibin sizde çalıştığını söylediniz, bu muhtemelen
ptdraft`ın kendisini (üstünü değil) PYTHONPATH'e eklediğiniz anlamına gelir.
Modül klasörünüzü PYTHONPATH'e eklemek işe yaramadıysa, Python yorumlayıcısının içe aktarılacak modülleri aradığı programınızdaki sys.path listesini değiştirebilirsiniz, python belgeleri diyor:
gt;spam isimli bir modül içe aktarıldığında, yorumlayıcı ilk olarak bu isimde yerleşik bir modül arar. Bulamazsa, sys.path değişkeni tarafından verilen dizin listesinde spam.py adlı bir dosya arar. sys.path bu konumlardan başlatılır:
- girdi betiğini içeren dizin (veya geçerli dizin).
- PYTHONPATH (kabuk değişkeni PATH ile aynı sözdizimine sahip bir dizin adları listesi).
- kuruluma bağlı varsayılan.
Başlatma işleminden sonra Python programları sys.path dosyasını değiştirebilir. Çalıştırılan betiği içeren dizin, arama yolunun başına, standart kütüphane yolunun önüne yerleştirilir. Bu, kütüphane dizinindeki aynı adlı modüller yerine bu dizindeki betiklerin yükleneceği anlamına gelir. Değiştirme amaçlanmadığı sürece bu bir hatadır.
Bunu bilerek, programınızda aşağıdakileri yapabilirsiniz:
import sys
# Add the ptdraft folder path to the sys.path list
sys.path.append('/path/to/ptdraft/')
# Now you can import your module
from ptdraft import nib
# Or just
import ptdraft