How to Import a Python Script into Another Python Script

5/5 - (2 votes)

Problem Formulation and Solution Overview

In this article, you’ll learn how to import a Python script into another Python script.

To make it more fun, we have the following running scenario:

Your boss at the Finxter Academy has asked you to create five (5) customized login greetings for their users. To keep your code clean, you have decided to place these functions in a new Python file, greetings.py.

💡 Note: For this article, we will be working with the fictitious Finxter Academy user, cdriver.

Contents of greetings.py file

def greeting_am(user):
    return f"Good Morning {user}."
def greeting_lunch(user):
    return f"Enjoy Lunch {user}."
def greeting_break():
    return f"You need a break."
def greeting_aft(user):
    return f"Good Afternoon {user}."
def greeting_pm(user):
    return f"Good Evening {user}."

💬 Question: How would we write Python code to import a Python script into another Python script?

We can accomplish this task by one of the following options:

  • Method 1: Import a Single Function from another Python file
  • Method 2: Import 2 Functions from another Python file
  • Method 3: Import All Functions from another Python file
  • Method 4: Use read() to read in another Python file
  • Bonus Script

Preparation

Add the following code to the top of each code snippet. This snippet will allow the code in this article to run error-free.

import datetime

Method 1: Import a Single Function from another Python File

If a Finxter user logs in between the stated range (today.hour >= 1 and today.hour < 12), this code assumes it is morning and the greeting_am message displays.

from greetings import greeting_am
today = datetime.datetime.now()
if (today.hour >= 1 and today.hour < 12):
    from greetings import greeting_am
    print(greeting_am('cdriver'))

This code retrieves the current date by using datetime.datetime.now() and saves it to today.

Next, the if statement retrieves the current hour (today.hour). If this value falls between the stated range, one (1) function is called in from greetings.py: greeting_am and executes.

The result is output to the terminal.

Output

Good Morning cdriver.

Method 2: Import Two Functions from another Python File

If a Finxter user logs in between the stated range (today.hour >= 12 and today.hour <= 13), this code assumes it is the user’s lunch period and displays the greeting_lunch and greeting_break() messages.

from greetings import greeting_lunch, greeting_break
today = datetime.datetime.now()
if (today.hour >= 12 and today.hour <= 13):
    from greetings import greeting_lunch, greeting_break
    print(greeting_lunch('cdriver'))
    print(greeting_break())

This code retrieves the current date by using datetime.datetime.now() and saves it to today.

Next, the if statement retrieves the current hour (today.hour). If this value falls between the stated range, two (2) functions are called from greetings.py: greeting_lunch and greeting_break, and execute.

The result is output to the terminal.

Output

Enjoy Lunch cdriver.
You need a break.

💡 Note: If your code only requires a few functions from an external Python file, it may be best to call in just the ones you need.


Method 3: Import All Functions from another Python File

If a Finxter user logs in between the stated range (today.hour > 13 and today.hour < 17), this code assumes it is afternoon and displays the greeting_aft message.

from greetings import *
today = datetime.datetime.now()
if (today.hour > 13 and today.hour < 17):
    from greetings import *
    print(greeting_aft('cdriver'))

This code retrieves the current date by using datetime.datetime.now() and saves it to today.

Next, the if statement retrieves the current hour (today.hour). If this value falls between the stated range, the entire contents of greetings.py is called in (from greetings import *) and greeting_aft executes.

The result is output to the terminal.

Output

Good afternoon cdriver.

Method 4: Use read() to import another Python file

If a Finxter user logs in between the stated range (today.hour > 17 and today.hour < 24), this code assumes it is evening and displays the greeting_pm message.

today = datetime.datetime.now()
if (today.hour > 17 and today.hour < 24):
   with open('greetings.py', 'r') as fp:
        exec(fp.read())
        print(greeting_pm('cdriver'))

This code retrieves the current date by using datetime.datetime.now() and saves it to today.

Then the if statement retreives the current hour (today.hour). If this value falls between the stated range, the entire content of greetings.py is read in (fp.read()), allowing access to all the contents of this file. For this example, greeting_pm executes.

Finally, we execute the file using the (dangerous!) exec() function.

🌍 Learn More: Python exec() — A Hacker’s Guide to A Dangerous Function

Python’s exec() function executes the Python code you pass as a string or executable object argument.

This is called dynamic execution because, in contrast to normal static Python code, you can generate code and execute it at runtime.

This way, you can run programmatically-created Python code.

The result is output to the terminal.

Output

Good Evening cdriver.

Bonus Script

Working with the greetings.py file and the examples above, this code streamlines it down to one concise file.

import datetime
from greetings import *

today = datetime.datetime.now()

if (today.hour >= 1 and today.hour < 12):
    print(greeting_am('cdriver'))
elif (today.hour >= 12 and today.hour <= 13):
    print(greeting_lunch('cdriver'))
    print(greeting_break())
elif (today.hour > 13 and today.hour < 17):
    print(greeting_aft('cdriver'))
else:    
    print(greeting_pm('cdriver'))

⚡Finxter Challenge: Modify the greetings.py file.


Summary

These five (5) methods of importing a Python script into another Python file should give you enough information to select the best one for your coding requirements.

Good Luck & Happy Coding!