Size: a a a

2021 November 25

VR

Vartan RedMan in Python
я представляю себе пакет как папку внутри которой множество модулей, это верно?
источник

TB

Thomas Brown in Python
Давай с терминами сначала разберемся, их много и каждый использует стандарты для себя какие удобнее

run.py - основной файл
hello_wolrd.py - модуль
folderWorld - папка
__init__.py - настройка
hello.py - модуль в папке folderWorld к примеру
###########################
в питоне есть своя библиотека куда ты устанавливаешь модули pip install
site-packages - стандартная библиотека

Процесс поиска импорта.
Берется sys.path проекта.
Берется <Name> импорта
Далее, смотрим, есть ли <Name>.py (модуль) в sys.path ?
Если нету смотрим есть ли папка <Name> в sys.path, ага есть, значит далее нам импортировщик глядит далее, после названия папки есть что-то? нету, значит идем в init, если там нету = error
Если папки не нашел, то глядит в site-packages если там нет = error

Когда ты запускаешь run.py создается параметр sys.path который равен папке где лежит run.py
Ты обращаешься к модулу hello_world через  - import hello_wolrd или from hello_wolrd import *
Если ты хочешь обратиться к hello.py ты пишешь import folderWolrd.hello
Если в init ты засунул help = 3, то импорт help будет как from folderWorld import help
источник

TB

Thomas Brown in Python
У самого уже мозги вскипели)
источник

RV

Roman Voronov in Python
Тут возможно несколько подходов. Часть из них - про затолкать значение в класс и повесить на класс observer pattern. Но лучше, конечно, ответственность за контроль типа оставить функции, которая меняет значение. Т.е. перед вставкой значения проверять через type а то ли мы щас присунем.
источник

TB

Thomas Brown in Python
Alex лучше меня рассказывает теорию, как я понял, я более практик
источник

TB

Thomas Brown in Python
Собственно если в hello.py тебе надо импортировать help который в init, все также, от самого начала, сначала заходим в папку, потом идем в init
источник

TB

Thomas Brown in Python
ИМХО
Пакет это тот фрукт который идет в pip install <package>
Так как в пакете зависимости и еще куча аргументов которые дают возможность общаться с модулями
источник

TB

Thomas Brown in Python
Но термины у всех свои
источник

VS

Vladimir Suisei in Python
Геморройненько конечно это...
источник

RV

Roman Voronov in Python
Ага. А с какой целью нужно отслеживать?
источник

Pavel Павлик in Python
Если имя генерируется динамически, то IDE это может пропустить
источник

TB

Thomas Brown in Python
А понял, я о другом сначала подумал)
источник

VS

Vladimir Suisei in Python
Ну вот сейчас ошибся, и в другие разы ошибался потому что где-то случайно что-то не туда присвоиволсь, а питон сожрал но упал в другом месте
источник

TB

Thomas Brown in Python
@pvlzhr а ты за python в linux без граф оболочки знаешь?
источник

VR

Vartan RedMan in Python
если в run.py есть функция main значит он уже перестаёт быть модулем ?
сам питоновский файл представляет из себя модуль ведь который можно импортнуть
источник

VS

Vladimir Suisei in Python
Ладно, я сам влез в динамическую типизацию, грех на нее жаловаться
источник

TB

Thomas Brown in Python
Он перестает быть модулем когда ты его запускаешь
источник

Pavel Павлик in Python
источник

TB

Thomas Brown in Python
Ты не можешь импортнуть самого себя
источник

Pavel Павлик in Python
Всмысле?
источник