Key takeaways 1. While a module is designed to couple together some related entities (functions, variables, constants, etc.), a package is a container which enables the coupling of several related modules under one common name. Such a container can be distributed as-is (as a batch of files deployed in a directory sub-tree) or it can be packed inside a zip file. 2. During the very first import of the actual module, Python translates its source code into the semi-compiled format stored inside the pyc files, and deploys these files into the __pycache__ directory located in the module's home directory. 3. If you want to instruct your module's user that a particular entity should be treated as private (i.e. not to be explicitly used outside the module) you can mark its name with either the _ or __ prefix. Don't forget that this is only a recommendation, not an order. 4. The names shabang, shebang, hasbang, poundbang, and hashpling describe the digraph written as #!, used to instruct Unix-like OSs how the Python source file should be launched. This convention has no effect under MS Windows. 5. If you want convince Python that it should take into account a non-standard package's directory, its name needs to be inserted/appended into/to the import directory list stored in the path variable contained in the sys module. 6. A Python file named __init__.py is implicitly run when a package containing it is subject to import, and is used to initialize a package and/or its sub-packages (if any). The file may be empty, but must not be absent. Key takeaways 1. A repository (or repo for short) designed to collect and share free Python code exists and works under the name Python Package Index (PyPI) although it's also likely that you come across a very niche name The Cheese Shop. The Shop's website is available at https://pypi.org/. 2. To make use of The Cheese Shop the specialized tool has been created and its name is pip (pip installs packages while pip stands for... ok, don't mind). As pip may not be deployed as a part of standard Python installation, it is possible that you will need to install it manually. Pip is a console tool. 3. To check pip's version one the following commands should be issued: pip --version or pip3 --version Check yourself which of these works for you in your OS' environment. 4. List of main pip activities looks as follows: pip help operation - shows brief pip's description; pip list - shows list of currently installed packages; pip show package_name - shows package_name info including package's dependencies; pip search anystring - searches through PyPI directories in order to find packages which name contains anystring; pip install name - installs name system-wide (expect problems when you don't have administrative rights); pip install --user name - install name for you only; no other your platform's user will be able to use it; pip install -U name - updates previously installed package; pip uninstall name - uninstalls previously installed package; from mod import fun performed by the install command accompanied by the -U option __name__ tell a Unix or Unix-like OS how to execute the contents of a python file mod.fun() show What is true about the pip search command? three answers(searches through package names only, searches through all PyPI packages, needs working internet connection to work), all its searches are limited to locally installed packages executed once entity c from mod b from pack a dir() __pycache__ version function from platform mod returns string with OS version AND system fun from platform mod returns string with OS name compiled python code locally installed packages 1 11, 12, 21, 22 pip uninstall package installs package per user on when --user AND allows user to install specific version