Home > Blockchain >  Importing Functions From Another Directory Using A Function?
Importing Functions From Another Directory Using A Function?

Time:07-01

I'm using Python 3.9

I have the following structure:

parent_folder
      |
      |-->. useful_functions.py .
      |-->. script_folder_1 .
                  |
                  |-->. script_1.py
                  |-->. function_import.py
      |-->. script_folder_2 .
                  |
                  |-->. script_2.py
                  |-->. function_import.py

script_1.py and script_2.py are very similar (but not identical), and so both want to use the functions stored in useful_functions.py

I have worked out that I can import the functions from useful_functions.py by putting the following at the top of script_1.py and script_2.py:

import sys
import os
local_dir = os.getcwd()
dir_up = os.path.dirname(local_dir)
sys.path.append(dir_up)
import useful_functions as uf

This works, meaning it allows script_1.py to call functions from useful_function.py as uf.function_name(arguments)

Since this text block is identical in script_1.py and script_2.py, I wanted to pull it out and make it a function in a different file function_import.py, since that way if I need to modify it I can modify the standalone file in script_folder_1 and copy it to script_folder_2.

However, when I create function_import.py, function_import.py is able to "locally" access the functions from useful_functions.py, but script_1.py is not able to access the functions from useful_functions.py.

Details:

def function_import():
         import sys
         import os
         import re
         local_dir = os.getcwd()
         dir_up = os.path.dirname(local_dir)
         sys.path.append(dir_up)
 
         import useful_functions as uf
         print(uf.test_function())

script_1.py:

import function_import
function_import.function_import()
uf.test_function()

When I run script_1.py in the terminal, uf.test_function() returns 3, the placeholder value, inside of function_import(), but then when script_1.py calls uf.test_function(), I get: NameError: name 'uf' is not defined

Is there a way to allow a function inside a script to import modules for the script to use? Or is there some other way entirely that I should be doing this?

I read these posts and they didn't seem to have a good solution to my problem: https://stackoverflow.com/search?q=import from parent directory python&s=5452f193-c78d-4966-b69a-896fb6a5a5f8

Import Script from a Parent Directory

CodePudding user response:

This doesn't define a function inside function_import.py but it does the job


function_import.py:

import sys
import os
import re
local_dir = os.getcwd()
dir_up = os.path.dirname(local_dir)
sys.path.append(dir_up)
import useful_functions as uf

useful_functions.py:

def test_function():
    print('In the test function')

script_1.py:

from function_import import uf

uf.test_function()

Outputs In the test function

CodePudding user response:

It's not the perfect solution but you can wrap your function into another one like so :

function_import.py:

def function_import():
     import sys
     import os
     import re
     local_dir = os.getcwd()
     dir_up = os.path.dirname(local_dir)
     sys.path.append(dir_up)
     
     import useful_functions as uf
     
     #print(uf.test_function())

def uf_test_function(*args, **kwargs):
    uf.test_function(*args, **kwargs)

script_1.py:

import function_import
function_import.function_import()
function_import.uf_test_function()
  • Related