Kardeş paketlerden yapılan ithalatla ilgili soruya da benzer bir cevap gönderdim. Burada görebilirsiniz .
sys.path
Kesmeksizin çözüm
özet
- Kodu bir klasöre sarın (ör.
packaged_stuff
)
- Setuptools.setup () yöntemini
setup.py
kullandığınız create komut dosyasını kullanın .
- Pip ile paketi düzenlenebilir durumda yükleyin
pip install -e <myproject_folder>
- Kullanarak içe aktar
from packaged_stuff.modulename import function_name
Kurmak
Sorudakiyle aynı klasör yapısını varsayıyorum
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
.
Kök klasörü çağırıyorum ve benim durumumda yer alıyor C:\tmp\test_imports
.
adımlar
1) setup.py
Kök klasöre a ekleyin
Kutunun içeriği setup.py
basitçe
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
Temelde "herhangi" setup.py
işe yarayacaktı. Bu sadece minimal bir çalışma örneğidir.
2) Sanal bir ortam kullanın
Sanal ortamlara aşina iseniz, birini etkinleştirin ve sonraki adıma geçin. Sanal ortamların kullanılması kesinlikle gerekli değildir , ancak uzun vadede size gerçekten yardımcı olacaktır (1'den fazla projeniz devam ederken ..). En temel adımlar (kök klasörde çalıştır)
- Sanal env oluştur
- Sanal env'yi etkinleştir
. /venv/bin/activate
(Linux) veya ./venv/Scripts/activate
(Kazan)
Bu konuda daha fazla bilgi edinmek için, sadece "python virtualenv tutorial" veya benzeri Google'ı kullanın. Muhtemelen oluşturma, etkinleştirme ve devre dışı bırakma dışında başka komutlara ihtiyacınız yoktur.
Bir sanal ortam oluşturup etkinleştirdikten sonra, konsolunuz parantez içinde sanal ortamın adını vermelidir
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) pip projenizi düzenlenebilir durumda yükleyin
myproject
Kullanarak üst düzey paketinizi kurun pip
. Hile, -e
yükleme yaparken bayrağı kullanmaktır . Bu şekilde düzenlenebilir bir duruma yüklenir ve .py dosyalarında yapılan tüm düzenlemeler otomatik olarak yüklü pakete dahil edilir.
Kök dizinde çalıştırın
pip install -e .
(noktaya dikkat edin, "geçerli dizin" anlamına gelir)
Ayrıca şunu kullanarak yüklendiğini görebilirsiniz: pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) mainfolder
Her ithalata ekleyerek ithalat
Bu örnekte, mainfolder
olurdu ptdraft
. Bunun avantajı, diğer modül adlarıyla (python standart kitaplığından veya 3. taraf modüllerinden) ad çakışmalarına girmemenizdir.
Örnek Kullanım
nib.py
def function_from_nib():
print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
Koşu life.py
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!