Finally someone has explained it properly – thank you Mr_and Mrs_D!
Everyone keeps reading the accepted post and assumes it's just about directory structure or Python paths, completely missing the actual reason: how Python treats modules and packages depending on how they're executed.