Say we have to files in our root:
main.pyutility.pyHow can we make these useable across files with the help of modules?
Let's say this is our utility.py file:
def add(a, b): return a + b
If I want to use it in main.py:
import utility
Every time we run a file with imports, there is a __pycache__ created where a compiled version of the utility.py is cached.
Say our layout is like so:
- main.py - shopping/shopping_cart.py - utility.py
How can we use shopping/shopping_cart.py in main.py? What we have done is create a package. A package is a folder containing modules.
This is how it would work:
import shopping.shopping_cart print(shopping.shopping_cart) # <module 'shopping.shopping_cart' from 'shopping/shopping_cart.py'>
Within a package, it is a rule that there is a __init__.py file. The interpreter needs it to know that it is a package. It can be completely empty.
What happens if you have another package within a package? How does importing begin to work?
The import then becomes:
import shopping.more_shopping_cart.shopping_cart print(shopping.more_shopping_cart.shopping_cart) # <module 'shopping.shopping_cart' from 'shopping/shopping_cart.py'>
But this becomes unclear. What we can do is start to make use of the from keyword.
from shopping.more_shopping_cart.shopping_cart import buy print(buy) # <module 'shopping.shopping_cart' from 'shopping/shopping_cart.py'>
What happens when you are going to have function naming collisions?
You can avoid this by importing up a level or importing all with *:
# Preferred on the video from shopping.more_shopping_cart.shopping_cart import * # Alternative from shopping.more_shopping_cart import shopping_cart
__name__We need to cover the concept of __name__ because something you will see often in Python:
if __name__ == '__main__': # Something
The __name__ references to module name (including the package).
The __main__ is the file that is being run. That if control statement allows us to do something within a module file when we are running it.
Python has a bunch of built-in modules.
In other languages, this would be known as the standard library.
When you want to learn more about a module, we can use help:
import random help(random) # See help on module dir(random) # See all the functions in the module
This section went over the Python Package Index
Virtual environments allows multiple versions of different modules to be installed on a single machine.
The venv folder is where the virtual environment info is stored when using Virtualenv.
You can have new environments use Pipenv, Conda, Virtualenv and more.
Counter, defaultdict, namedtuple, OrderedDict, deque, etc.datetime.datetime, datetime.timedelta, datetime.timezone, etc.array.array, array.array_tobytes, etc. Lists are dynamic, arrays have set memory.