Python следует модели выполнения, очень близкой к обычным программам на вашем компьютере. Программа (или python скрипт) находится где-то в $PATH
, а все библиотеки, которые она загружает (или python модуль), находятся в другом определенном системой месте. Python намеревается установить. Сценарии помещаются в PATH, а модули зарыты где-то в каталогах python.
Единственным исключением является то, что при запуске сценария python добавляет свой каталог к пути python для модулей. Таким образом, любой из его подкаталогов, в котором есть __init__.py
, становится python пакетами. Когда вы запускаете main.py
, это сценарий, а subdir
- пакет. Это позволяет module1.py
выполнять относительный импорт пакетов. Интересно, что main.py
сам по себе не находится в пакете, __init__.py
на его уровне не импортируется.
Когда вы запускаете module1.py
как сценарий, это тоже не пакет. Таким образом, относительный импорт пакетов больше не работает.
Решение состоит в go, сделав все это устанавливаемым пакетом. Вы определяете setup.py, и, ну, есть несколько вариантов того, как это настроить. setuptools - хороший ресурс. Следует отметить параметр console_scripts
, который автоматически генерирует скрипты из точек входа в модуль.
Это большой холм, на который нужно подняться, но как проекты go за пределами одного или двух модулей , стоит боли.