Entendiendo una cadena de importaciones en Python

Sé que hay varias preguntas similares, pero estoy luchando por comprender el error que recibo y navegar por los documentos y preguntas similares aún no ha ayudado. En todo caso, las preguntas similares me hacen sentir que lo que estoy haciendo es correcto.

Tengo los siguientes archivos:

src / main.py

from pack import pack

if __name__ == '__main__':
    pack.exec("Hello Universe!")

src / pack / pack.py

import util

def exec(text):
    util.write(text)

if __name__ == '__main__':
    exec("Hello World!")

src / pack / util.py

def write(text):
    print(text)

* src / paquete / _en es_. py *

EMPTY FILE

Cuando corropython pack.py desde elsrc/pack directorio, funciona (imprime "Hello World!"). Sin embargo, cuando ejecutopython main.py desde elsrc directorio obtengo la siguiente excepción:

Traceback (most recent call last):
  File ".../src/main.py", line 1, in <module>
    from pack import pack
  File ".../src/pack/pack.py", line 1, in <module>
    import util
ImportError: No module named util

Si cambio la línea de importación enpack.py afrom . import util como se sugiere, efectivamente ocurre lo contrario. @main.py se ejecuta con éxito, sin embargo ahorapack.py falla, elevando:

Traceback (most recent call last):
  File ".../src/pack/pack.py", line 1, in <module>
    from . import util
ValueError: Attempted relative import in non-package

Pensé que las importaciones son relativas a la ubicación actual, y como tal, debería poder construir una cadena de importaciones como esta. Me parece muy extraño que se suponga que el módulo importe un archivo hermano de manera diferente dependiendo de dónde se inicie el programa.

Puede alguien explicar por qué este error ocurre de una manera pero no de la otra, y si hay alguna forma de permitir que se ejecute esta estructura de archivos si quiero ejecutar desdemain.py opack.py?