Reputation: 925
I had a question on how libraries like numpy work. When I import numpy
, I'm given access to a host of built in classes, functions, and constants such as numpy.array
, numpy.sqrt
etc.
But within numpy there are additional submodules such as numpy.testing
.
How is this done? In my limited experience, modules with submodules are simply folders with a __init__.py
file, while modules with functions/classes are actual python files. How does one create a module "folder" that also has functions/classes?
Upvotes: 35
Views: 38796
Reputation: 10585
A folder with .py
files and a __init__.py
is called a package
. One of those files containing classes and functions is a module
. Folder nesting can give you subpackages.
So for example if I had the following structure:
mypackage
__init__.py
module_a.py
module_b.py
mysubpackage
__init__.py
module_c.py
module_d.py
I could import mypackage.module_a
or mypackage.mysubpackage.module_c
and so on.
You could also add functions to mypackage
(like the numpy functions you mentioned) by placing that code in the __init__.py
. Though this is usually considered to be ugly.
If you look at numpy's __init__.py
you will see a lot of code in there - a lot of this is defining these top-level classes and functions. The __init__.py
code is the first thing executed when the package is loaded.
Upvotes: 59