I'm working on a rather elaborate project and have run into some confusion regarding why I get a ModuleNotFoundError: No module named 'burrow.settings' (I called it myapp.settings in the title for better searchability) when calling __main__.py by running $ python -m burrow, but $ python burrow works perfectly well!
I have no relative imports anywhere in my code and haven't touched the boilerplate generated by Django, and have tried and searched all kinds of things and can't find out why this is behaving differently, so any insight would be greatly appreciated!
The repository structure may be a little confusing (suggestions for improvement welcome), but effectively consists of a single Project (meercat) consisting of two sub-packages (burrow and lookout) which represent a server and a client respectively.
Within the server package (burrow), there is the regular Django boilerplate (burrow/burrow) as well as a Django REST Framework app (api).
meercat
    - data
    - docs
    - meercat
      - burrow
        - api     // newly created
        - burrow  // created with startapp, untouched
        - __init__.py
        - __main__.py
        - controller.py
        - manage.py
      - env
      - lookout
      - __init__.py
      - core.py
  README.md
Relevant code:
# __main__.py
import argparse as ap
import logging
import os
import sys
import django
from django.core.exceptions import AppRegistryNotReady
from django.core.management.color import supports_color
try:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "burrow.settings")
    django.setup()
    import controller
except (AppRegistryNotReady, ModuleNotFoundError) as e:
    raise RuntimeError(f"Caught {e}: Ensure execution from correct location!")
# various logging and argparse setup
def main() -> None:
    """Create and run a Meercat Burrow."""
    vals: dict[str, Any] = vars(args)  # argparse values
    return controller.main(vals)
if __name__ == "__main__":
    # runs when package is called
    sys.exit(main())
Upon running /meercat/meercat$ python3 burrow, sys.path is
[
    '/home/memory_module/Code/meercat/meercat/burrow',
    '/usr/lib/python311.zip', '/usr/lib/python3.11', 
    '/usr/lib/python3.11/lib-dynload', 
    '/home/user/.local/lib/python3.11/site-packages', 
    '/usr/local/lib/python3.11/dist-packages', 
    '/usr/lib/python3/dist-packages'
]
and upon running /meercat/meercat$ python3 -m burrow, sys.path is
[
    '/home/memory_module/Code/meercat/meercat',
    '/usr/lib/python311.zip', '/usr/lib/python3.11', 
    '/usr/lib/python3.11/lib-dynload', 
    '/home/user/.local/lib/python3.11/site-packages', 
    '/usr/local/lib/python3.11/dist-packages', 
    '/usr/lib/python3/dist-packages'
]
but manually appending '/home/memory_module/Code/meercat/meercat/burrow' to the path doesn't help.
I should note that when I run controller.main() directly (either through meercat/meercat/burrow$ python3 controller.py or meercat/meercat/burrow$ python3 -m controller)
Why does __main__.py behave differently in this regard to controller.py, and what am I doing wrong?
TL;DR: Django doesn't like treating __main__.py the same as controller.py, and I can't figure out why.
Source: A total of ca. 6 hours trying to understand the intricacies of __main__ from the Python docs, trying to find people who have had related issues and a bunch of fruitless experimentation.
Full Traceback:
Traceback (most recent call last):
    File "/home/memory_module/Code/meercat/meercat/burrow/__main__.py", line 20, in <module>
        django.setup()
    File "/home/rjn/.local/lib/python3.11/site-packages/django/__init__.py", line 19, in setup
        configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
                      ^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/rjn/.local/lib/python3.11/site-packages/django/conf/__init__.py", line 92, in __getattr__
        self._setup(name)
    File "/home/rjn/.local/lib/python3.11/site-packages/django/conf/__init__.py", line 79, in _setup
        self._wrapped = Settings(settings_module)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/rjn/.local/lib/python3.11/site-packages/django/conf/__init__.py", line 190, in __init__
        mod = importlib.import_module(self.SETTINGS_MODULE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
    File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
    File "<frozen importlib._bootstrap>", line 1142, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'burrow.settings'
 
    