В тази статия ще се научите да разделяте кодовата си база на чисти, ефективни модули, използвайки Python пакети. Също така ще се научите да импортирате и използвате собствени или трети пакети във вашата програма Python.
Видео: Пакети на Python: Организирайте кода си
Какво представляват пакетите?
Обикновено не съхраняваме всичките си файлове на компютъра си на едно и също място. Използваме добре организирана йерархия на директориите за по-лесен достъп.
Подобни файлове се съхраняват в една и съща директория, например, ние можем да съхраняваме всички песни в директорията " музика ". Аналогично на това, Python има пакети за директории и модули за файлове.
Тъй като нашата приложна програма се разраства с много модули, ние поставяме подобни модули в един пакет и различни модули в различни пакети. Това прави един проект (програма) лесен за управление и концептуално ясен.
По същия начин, тъй като директорията може да съдържа поддиректории и файлове, пакетът на Python може да има подпакети и модули.
Директорията трябва да съдържа файл с име, __init__.py
за да може Python да го разглежда като пакет. Този файл може да остане празен, но обикновено поставяме инициализиращия код за този пакет в този файл.
Ето един пример. Да предположим, че разработваме игра. Една възможна организация на пакети и модули може да бъде както е показано на фигурата по-долу.
![](https://cdn.wiki-base.com/2810373/python_packages_how_to_create_and_import_them_.jpg.webp)
Импортиране на модул от пакет
Можем да импортираме модули от пакети, използвайки оператора dot (.).
Например, ако искаме да импортираме start
модула в горния пример, това може да стане по следния начин:
import Game.Level.start
Сега, ако този модул съдържа функция с име select_difficulty()
, трябва да използваме пълното име, за да го препращаме.
Game.Level.start.select_difficulty(2)
Ако тази конструкция изглежда продължителна, можем да импортираме модула без префикса на пакета, както следва:
from Game.Level import start
Вече можем да извикаме функцията просто по следния начин:
start.select_difficulty(2)
Друг начин за импортиране само на необходимата функция (или клас или променлива) от модул в пакета ще бъде както следва:
from Game.Level.start import select_difficulty
Сега можем директно да извикаме тази функция.
select_difficulty(2)
Макар и по-лесен, този метод не се препоръчва. Използването на пълното пространство на имената избягва объркване и предотвратява сблъсъка на две еднакви имена на идентификатори.
Докато импортира пакети, Python изглежда в списъка с директории, дефинирани в sys.path
, подобно на пътя за търсене на модули.