Let’s say I have the following structure:
my_module/
__init__.py
utilities.py
and __init__.py
contains
from .utilities import SomeUtilityFunction
Is there a way to prevent or alert developers when they do
from my_module.utilities import SomeUtilityFunction
instead of
from my_module import SomeUtilityFunction
The problem arose when a few modules started using a function that was imported inside a module in which it wasn’t used, while also being available on the module’s __init__.py
, so after linting the file and removing the unused import my tests started failing.
any other advice for situations like this?
It works exactly like one. You get a warning if you try to import something not defined in it. The docs are just very confusing here ;)
Bullshit!
module/__init__.py
:__all__ = ["foo", "bar"]
module/foo.py
:def foo(): print("foo")
module/bar.py
:def bar(): print("bar")
module/baz.py
:def baz(): print("baz")
main.py
:from module import * from module import baz if __name__ == "__main__": print("main") foo.foo() bar.bar() baz.baz()
Output:
$ python main.py main foo bar baz
No errors, warnings or anything.
You’re running python without linters? Interesting approach.
You can’t expect the user to have one.
@sebsch Linters aren’t runtime. Whether something will work and whether it conforms to best practice are two totally different things.