Типовая структура проекта на питоне:|
my_project_name\ # корневой каталог проекта
.git # каталог с данными контроля версий
my_project_name\ # каталог главного пакета вашего проекта
__init__.py # файл, который делает из этого каталога пакет. Файл можно оставить пустым
my_script1.py # Скрипт, который вы возможно захотите хапустить внутри вашего проекта
my_script2.py # Ещё один скрипт
my_module1.py # модуль, который вы хотите импортировать внутри проекта
my_module2.py # ещё модуль
my_sub_package\ # если модуль уже хочется разбить на несколько файлов, то можно сделать пакет
__init__.py # этот файл делает из каталога с исходниками пакет, который позволит ммпортировать его как модуль
my_module3.py # это модуль внутри пакета
my_module4.py # ещё один
my_lib1\ # это пакет, который не зависит от вашего проекта, но используется в нём и вы почему-то
# хотите хранить их в одном репозитории. Странное решение, но так тоже можно.
__init__.py # да, этот каталог стал пакетом благодаря этому файлу
my_lib_module.py # тут может быть ещё много модулей
setup.py # этот файл нужен, чтобы все эти пакеты (их сейчас тут два) можно было ставить через
# пакетный менеджер питона, например pip
readme.txt # ридми. Те, кто не делают ридми, рискуют немножко гореть в аду.
Вы можете импортировать из одного модуля другие абсолютным иотносительным импортом.
Я рекомендую, пока у вас мало лпыта, пользоватьс яотносительным и не переусложнять с этим.
Например, чтобы в my_script1 вызвать функцию из другизх модулей и пакетов, пишите так:
from my_project_name.my_module1 import my_function1
from my_project_name.my_sub_package.my_module3 import my_function3
from my_lib1 import my_lib_module
from my_lib1.my_lib_module import my_lib_function1
Вызываются и используются импортированные имена как обычно, будто они локально определены.
Я вот сейчас подумал, что хорошо бы оформить это в виде отдельного репозитория и провести митап среди джунов нашей компании. Уверен, что многие смутно представляют себе всю эту концепцию.