The first level “bagoftricks” is fine. That’s just the name of your “project” so to speak. In the you have a setup.py, and other files that tell the packaging systems what they need to know.
You can then have the code directly in this module, or in a src directory. You can even go as far as just having this structure:
bagoftricks
├── bagoftricks.py
├── README.md
└── setup.py
But I would not recommend that, mostly because you might want to reorganize things later, and it’s easier if you already have a “proper” package. Also most people, tools and docs assume you have a package, so it’s easier.
So the minimum would be:
bagoftricks
├── bagoftricks
│ └── __init__.py
├── README.md
└── setup.py
With __init__.py
containing the functions you want to import. You then use these functions like this:
from bagoftricks import levenshtein, anotherfunction
Once that __init__.py
becomes too big, you want to split it up in several modules, giving you something like this:
bagoftricks
├── bagoftricks
│ ├── __init__.py
│ ├── anothermodule.py
│ └── levenshtein.py
├── README.md
└── setup.py
Your __init__.py
should then import the functions from the various modules:
from bagoftricks.levenshtein import levenshtein
from bagoftricks.anothermodule import anotherfunction
And then you can still use them like like you did before.