Creating a Python Module

So, you’ve been learning Python for quite a while now. As a beginner, it is common practice to have a one-file program that has all the code organized with the use of classes and functions.

But as you get more advanced, and your code gets more complex, you need to learn to use multiple files.

What Exactly is a Python Module?

A Python module is a Python file that contains classes, methods, or variables that you’d like to include in your application.

A common practice that you’ll observe among advanced Python applications is reusable functions or classes combined in a file, and then imported in other parts of the program.

Python Module Example 1
Python Module Example 1

This is referred to as a Python module. This module can then be imported and the variables and functions can be reused multiple times without declaring or creating them every time.

[toc]

How to Create a Python Module?

It’s simple, but we’ll break it down into small chunks for you to understand it and be able to apply it in real-world scenarios.

1. Create a File Containing a Method

We’ll first create a basic method that adds two numbers which it accepts as parameters.

name = "AskPython"
def add(num1, num2):
        return num1 + num2

This is our module. The above code is simply a method that returns the sum of the two numbers that are passed to it. Save the above code as adder.py and we’ll move on to the next step.

2. Create the Main File to Import the Module

Our next step is to import custom python modules in our program. Now, this is exactly the same as importing any other module.

The only difference is that the module file is locally located instead of being in the system path.

import adder
nums = adder.add(5, 10)
print(nums)
Import Module Basics
This is the output that we’ll receive when the above program is run

In the above example, I’ve imported our “adder” file. You don’t need to add the “.py” extension while importing.

3. Importing Only One Function

Suppose in our module, we had multiple functions performing multiple tasks. But in the program that we are importing the module, we needed only one of those functions. Importing the entire module would be unnecessary.

In this case, we can make use of from and import together.

from adder import add

nums = add(5, 10)
print(nums)
Import Module Basics 1
Importing the function individually gives us the same output

As you can see, since we’re importing a specific function, Python allows us to use the function as if it was native to the file without having to reference it with the module name.

4. Using Variables From Our Module

You might have noticed the two variables in our module. We added those to demonstrate how variables can be directly imported from the module with their values intact.

import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)
Module Import Variables
Importing variables from modules

Importing Modules From Different Directory

You do not need to store the module in the same folder as your main file. That would become very inconvenient if there are a lot of files.

Also in case you’re importing a module to a different program, it will be difficult to use the module.

Instead, you can organize modules in folders, and still import them in the same manner as before. We’ll just have to make a small change to the import statement and everything else will run fine.

There are multiple ways we can import modules in our program which are not located in the root directory. Let’s start with the easy ones.

1. Import by Specifying Folder Name

The dot notation or from..import that we used above can be used to import modules that are located within a directory. Let’s place our “adder.py” module in a directory named modules.

Modules In Directory 1
Modules In Directory 1
import modules.adder as adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

In this example, we renamed our module name from “modules.adder” to “adder” using as.

The reason for that is without renaming, we’ll have to specify “modules.adder.add(5,10)” and so on every time we need to call a function from the module.

We do not need to rename a module in the import statement. We can also create a variable later in the program that holds the name of the module and use the variable to call functions within the module.

adder = modules.adder

This will work too, but declaring the new name right at the start of the program improves code readability making it easier for the next programmer who works on your piece of code.

Another way is to use from..import. This saves us from renaming the modules for use in the program. The only change I’ll need to make to my import command is to use from modules import adder

from modules import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

2. Append The Path to sys.path

When importing modules, Python starts by looking into the predefined paths first to find a module that matches the name. The first directory it looks into is the current directory, after which it moves to the other listed directories.

Let’s print out the sys.path and see what paths Python is looking into.

import sys
print(sys.path)
Sys Path In Python Linux
Sys Path In Python Linux

The above output is generated on a Linux computer. You will get a different list of paths if you’re using a Windows computer.

Since the sys.path is a Python list, we can append paths to it.

import sys
sys.path.append("modules")
import adder

nums = adder.add(5, 10)
print(nums)

print(adder.name)

We imported the sys module and appended our “modules” directory to it. So any time you need to import a module in the modules directory within this program, you can simply specify the name and you should be good to start working.

3. Making a Module Available System-Wide

We printed out the sys.path in the above example. We know that Python will look into those directories by default irrespective of where your code is placed.

If we move our module to one of those directories, you will easily have access to the module from any program you create on your computer in the future.

Do note that when porting the program to a different system, you will need the module to be copied along. So for program-specific modules, it’s best to organize them in folders within the parent directory and import from there.

Conclusion

You should now be able to create your custom modules in Python and write multi-file programs. Remember, having code organized in multiple files with the use of classes is a far better option for code reusability.

Many functions that you need now, could be useful in a future application too and these individual modules that you’ve created would just need to be imported saving you hours of work in case of advanced applications.