pythonproject-organization

Organising my Python project


I'm starting a Python project and expect to have 20 or more classes in it. As is good practice I want to put them in a separate file each. However, the project directory quickly becomes swamped with files (or will when I do this).

If I put a file to import in a folder I can no longer import it. How do I import a file from another folder and will I need to reference to the class it contains differently now that it's in a folder?

Thanks in advance


Solution

  • Create an __init__.py file in your projects folder, and it will be treated like a module by Python.

    Classes in your package directory can then be imported using syntax like:

    from package import class
    import package.class
    

    Within __init__.py, you may create an __all__ array that defines from package import * behavior:

    # name1 and name2 will be available in calling module's namespace 
    # when using "from package import *" syntax
    __all__ = ['name1', 'name2'] 
    

    And here is way more information than you even want to know about packages in Python

    Generally speaking, a good way to learn about how to organize a lot of code is to pick a popular Python package and see how they did it. I'd check out Django and Twisted, for starters.