Scenario
I am trying to understand how python packages work and I have one doubt. I have the following structure:
root
├── src
│   ├── main_pkg
|   |   ├─ __init__.py
|   |   ├─ letter.py
│   |   └─ main.py
|   └── numbers
|       ├─ __init__.py
|       └─ number.py       
├── pyproject.toml
└── setup.py
    
And the following files:
# main.py
from letters import letter_1
from numbers_pkg.numbers import number_1
def main():
    print(f"Letter is {letter_1}")
def number():
    print(f"Number is {number_1}")
if __name__ == "__main__":
    main()
# setup.py
from setuptools import setup
setup()
# pyproject.toml
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "imp"
version = "1.0.0"
[project.scripts]
letter = "main_pkg.main:main"
number = "main_pkg.main:number"
Error
If I run python src/main_pkg/main.py, the execution is successful.
But if I install the package with pip install -e ., and then I write letter on the console, I receive the following error: ModuleNotFoundError: No module named 'letters'. (the package is isntalled in a virtual env)
Solution
I have found one solution to run letter and solve the import error, change the first line of main.py:
from letters import letter_1 --> from main_pkg.letters import letter_1
Question
Is this how it should be done correctly? I understand that if I am importing modules from another package, I have to specify it, but if it is a module within the same package, isn't it redundant?
