Title is kinda confusing, but basically, I followed the Python packaging process to set up my Python package development environment. My project structure is layed out the same, except for a .venv in the root directory (not in src), and additional Python files in the src/package_username directory.

I can build my package fine, but when I go to import it into other projects, I have to import it like import package_username.file or from package_username.file import SomethingInFile. For other python packages, I would only need to do import package or from package import Something.

How can I set up by build process to remove the need for the first portion in my import statements so it matches other packages like termcolor? Is there something I need to add in my __init__.py file?

    • AstroLightz@lemmy.worldOP
      link
      fedilink
      arrow-up
      2
      ·
      27 days ago

      I looked at the guide you linked. So in my __init__.py file, I should import each public name I want from my files, then add them to the __all__ list like this? (I want to make sure I understood the guide correctly)

      from file_1 import SomeClass
      from file_2 import AnotherClass
      
      __all__ = [
          "SomeClass",
          "AnotherClass",
      ]
      
      • Eager Eagle@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        27 days ago

        right, those names are also useful when importing your package in tests

        you can also create a __version__ string and append it to __all__ to have a mypackage.__version__

        to pull version from pyproject.toml:

        LIB_NAME: str = "mypackage"
        __version__ = importlib.metadata.version(LIB_NAME)
        
        ...
        
        __all__ = [
            "__version__",
            ...
        ]