Ben taşırsanız CreateUser.pyana user_management dizinine, kolayca kullanabilirsiniz: import Modules.LDAPManagerithalat LDAPManager.py
--- bu işleri.
Lütfen yapma . Bu şekilde LDAPManagerkullandığı modül CreateUserolacak değil diğer ithalat yoluyla ithal aynı olması. Bu, modülde küresel bir durum olduğunda veya asitleme / ayırma sırasında sorunlar yaratabilir. Yalnızca modül aynı dizinde olduğu için çalışan içe aktarmalardan kaçının .
Bir paket yapınız olduğunda şunlardan birini yapmalısınız:
Eğer ie göreli ithalat kullanın CreateUser.pyiçindedir Scripts/:
from ..Modules import LDAPManager
Bu o Not oldu (Not geçmiş gergin) cesaretini PEP 8 piton eski sürümleri çok iyi onlara destek vermedi çünkü ancak bu sorun yıllar önce çözüldü. Mevcut PEP 8 versiyonu etmez mutlak ithalat kabul edilebilir bir alternatif olarak göstermektedir. Aslında onları paketlerin içinde seviyorum .
Tüm paket adını ( CreateUser.pyinç Scripts/) kullanarak mutlak içe aktarmaları kullanın :
from user_management.Modules import LDAPManager
İşe İkincisi için Amacıyla paket user_managementiçine monte edilmelidir PYTHONPATH. Geliştirme sırasında IDE'yi, herhangi bir yere manuel olarak çağrı eklemek zorunda kalmadan bunun gerçekleşmesi için yapılandırabilirsiniz sys.path.append.
Ayrıca Scripts/bir alt paket olmasını garip buluyorum . Çünkü gerçek bir kurulumda user_managementmodül site-packages, lib/dizinde bulunan (işletim sisteminizde kitaplıkları kurmak için hangi dizin kullanılırsa kullanılsın) altına kurulur, komut dosyaları ise bir bin/dizin altına kurulmalıdır (hangisi işletim sisteminiz için yürütülebilir dosyalar içeriyorsa).
Aslına bakarsan Script/, altının bile olmamasına inanıyorum user_management. İle aynı seviyede olmalıdır user_management. Bu şekilde kullanmak zorunda değilsiniz-m , ancak paketin bulunabileceğinden emin olmalısınız (bu yine IDE'yi yapılandırmak, paketi doğru yüklemek veya PYTHONPATH=. python Scripts/CreateUser.pykomut dosyalarını doğru yolla başlatmak için kullanmaktır ).
Özetle, hiyerarşi ı kullanırsınız geçerli:
user_management (package)
|
|------- __init__.py
|
|------- Modules/
| |
| |----- __init__.py
| |----- LDAPManager.py
| |----- PasswordManager.py
|
Scripts/ (*not* a package)
|
|----- CreateUser.py
|----- FindUser.py
Ardından, modülleri içe aktarmak için mutlak içe aktarma kodu CreateUser.pyve FindUser.pykullanması gerekir:
from user_management.Modules import LDAPManager
Kurulum sırasında , modülleri bulabilmeleri için yürütülebilir dosyalar için dizinin içindeki ve komut dosyalarının içinde bir user_managementyerde sona erdiğinden emin olun PYTHONPATH. Gelişimi sırasında ya IDE yapılandırması güvenmek ya da başlatmak CreateUser.pyekleyerek Scripts/için üst dizini PYTHONPATH(ben hem içeren dizini demek user_managementve Scripts):
PYTHONPATH=/the/parent/directory python Scripts/CreateUser.py
Ya da PYTHONPATHher seferinde bunu belirtmeniz gerekmeyecek şekilde global olarak değiştirebilirsiniz . Unix işletim sistemlerinde (linux, Mac OS X vb.) PYTHONPATHHarici değişkeni tanımlamak için kabuk komut dosyalarından birini değiştirebilirsiniz , Windows'ta çevresel değişken ayarlarını değiştirmeniz gerekir.
Ek Sana python2 kullanıyorsanız, o emin koyarak örtük nispi ithalat önlemek için yapmak daha iyidir, inanıyorum:
from __future__ import absolute_import
modüllerinizin en üstünde. Bu şekilde import X her zaman üst düzey modülü içe aktarmak anlamına gelir Xve asla X.pyaynı dizinde bulunan dosyayı içe aktarmayı denemeyecektir (eğer bu dizin içinde değilse PYTHONPATH). Bu şekilde, göreceli bir içe aktarma yapmanın tek yolu , daha iyi olan ( açık, örtükten daha iyi olan) açık sözdizimini (the from . import X) kullanmaktır .
Bu, "düzmece" örtük göreli içe aktarmaları asla kullanmamanızı sağlar, çünkü bunlar bir ImportErrorşeylerin yanlış olduğuna dair açık bir sinyal oluşturacaktır. Aksi takdirde, düşündüğünüz gibi olmayan bir modül kullanabilirsiniz.
python -m user_management.Scripts.CreateUser