Ben taşırsanız CreateUser.py
ana user_management dizinine, kolayca kullanabilirsiniz: import Modules.LDAPManager
ithalat LDAPManager.py
--- bu işleri.
Lütfen yapma . Bu şekilde LDAPManager
kullandığı modül CreateUser
olacak 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.py
iç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.py
inç Scripts/
) kullanarak mutlak içe aktarmaları kullanın :
from user_management.Modules import LDAPManager
İşe İkincisi için Amacıyla paket user_management
iç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_management
modü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.py
komut 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.py
ve FindUser.py
kullanması 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_management
yerde sona erdiğinden emin olun PYTHONPATH
. Gelişimi sırasında ya IDE yapılandırması güvenmek ya da başlatmak CreateUser.py
ekleyerek Scripts/
için üst dizini PYTHONPATH
(ben hem içeren dizini demek user_management
ve Scripts
):
PYTHONPATH=/the/parent/directory python Scripts/CreateUser.py
Ya da PYTHONPATH
her seferinde bunu belirtmeniz gerekmeyecek şekilde global olarak değiştirebilirsiniz . Unix işletim sistemlerinde (linux, Mac OS X vb.) PYTHONPATH
Harici 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 X
ve asla X.py
aynı 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