Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Importing a lot of modules from custom package

Say i have this this structure.

MyApp
├── main.py
└── package
    ├── __init__.py
    ├── a.py
    ├── b.py
    ├── c.py
    ├── d.py
    ├── e.py
    ├── f.py
    ├── g.py
    ├── h.py
    ├── ...
    └── z.py

And in main.py I need to use all modules, from a.py to z.py

I'd like to know how I can import all those modules with one import statement.

So instead of doing

from package import a
from package import b
...
from package import z

I could just import the package and have all the modules ready.

Things I've tried

import package
a = package.a.A()
# AttributeError: 'module' object has no attribute 'a'

Now I know I could put a code in __init__.py to add all the modules to __all__, but from what I've read, we should avoid 'from package import *'

The reason for this is that the package might have an increasing number of modules and I would like to adding an import statement to the main code each time a module is created. Ideally I'd like to be able to just drop the module in the package and have it ready for use.

like image 917
sqram Avatar asked Jan 16 '23 10:01

sqram


1 Answers

In __init__.py, you can:

import a, b, c, d...

and then the modules will be placed in the package namespace after you do import package.

You you really want to names a, b, etc. in main.py's namespace, and have this happen with no effort, you can't really avoid from package import *; any other method of importing them all implicitly is going to be just as bad, since it involves polluting the namespace with names you don't explicitly import.

like image 170
Wooble Avatar answered Jan 19 '23 00:01

Wooble