How do I call a function from another .py file? [duplicate]
Asked Answered
F

19

814

file.py contains a function named function. How do I import it?

from file.py import function(a,b)

The above gives an error:

ImportError: No module named 'file.py'; file is not a package

Fossilize answered 1/12, 2013 at 6:34 Comment(5)
from file import function. No need for file extensions or function parametersActinoid
You should probably go through the modules section in the Python tutorial.Macready
Also if you want to import the function from the file.py, make sure there is no package in your directory with the name file.Telstar
If you have an ImportError or a ModuleError see this question, it was very helpful for me #31279946Inlaid
from your_file_name import * works for mePtolemaeus
L
840

First, import function from file.py:

from file import function

Later, call the function using:

function(a, b)

Note that file is one of Python's core modules, so I suggest you change the filename of file.py to something else.

Note that if you're trying to import functions from a.py to a file called b.py, you will need to make sure that a.py and b.py are in the same directory.

Littell answered 1/12, 2013 at 6:36 Comment(11)
The "file" was just a placeholder for the question I am asking, not the actual file name. Thank you though. I will try this and get back to you.Fossilize
I tried this, but it is still showing the error: Has it got anything to do with Python 3, or is a general problem?Bound
@GamesBrainiac, what if the file you want to import functions from is in a different directory? Can I include the filepath preceeding the filename, or is there something more complicated?Moskowitz
@Moskowitz You have to add that path to the PYTHONPATH variable if it is not already in there.Littell
Is there a way to import functions from a.py to a file b.py if they are not in the same directory?Clamp
newbies try "import file", which should execute only once (singleton)Yoshida
Do you have to import all dependencies from file that are used in function as well?Toiletry
In Python 2 it looks like this either (a) executes the entire script you're referencing with from foo import ... or (b) does not work if foo.py has references to the argparse library.Magically
@Bound Same for me, I fixed it by changing the order of the imports within init.py file, making sure root dependencies were loaded after their transitive dependencies.Exoskeleton
Didn't work with a hyphen in the filename, e.g. from fil-e import *.Quartic
For those coming from a javascript background, note that you don't need quotes around the file name in the import. Also, if it's in a different directory, you can do from myDirectory.someSubDirectory.myFile import yay.Dense
I
307

Do not write .py when importing.

Let file_a.py contain some functions inside it:

def f():
  return 1

def g():
  return 2

To import these functions into file_z.py, do this:

from file_a import f, g
Intranuclear answered 1/12, 2013 at 6:37 Comment(7)
you can also import *Ageratum
@DimitarMarinov With * replaced by the filename?Hemicellulose
@Karlo, no, just *Ageratum
using "import *" is considered a bad practice. Explicit is better than implicit.Ordeal
If a.py is in a folder say fol1, then how shall it be imported? @dimitar-marinovFaultless
@AdityaC add the folder to your PYTHONPATH is one wayJongjongleur
Dimitar Marinov means this: from a import *Paravane
F
114

If your file is in the different package structure and you want to call it from a different package, then you can call it in that fashion:

Let's say you have following package structure in your python project:

Python package and file structure

in - com.my.func.DifferentFunction python file you have some function, like:

def add(arg1, arg2):
    return arg1 + arg2

def sub(arg1, arg2) :
    return arg1 - arg2

def mul(arg1, arg2) :
    return arg1 * arg2

And you want to call different functions from Example3.py, then following way you can do it:

Define import statement in Example3.py - file for import all function

from com.my.func.DifferentFunction import *

or define each function name which you want to import

from com.my.func.DifferentFunction import add, sub, mul

Then in Example3.py you can call function for execute:

num1 = 20
num2 = 10

print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))

Output:

 add :  30

 sub :  10

 mul :  200
Franni answered 31/1, 2019 at 12:32 Comment(4)
glob import is discouraged.Starshaped
Can't resist to point out the Java like file structure... com.my.example.. kinda pokes into my eyes, though it might be just me.Expel
WHat should be the working directory to run the code ?Starlike
I am executing this addition or multiplication function from the "Example3.py" file.Franni
C
100

Method 1. Import the specific function(s) you want from file.py:

from file import function

Method 2. Import the entire file:

import file as fl

Then, to call any function inside file.py, use:

fl.function(a, b)
Cynic answered 20/7, 2017 at 4:26 Comment(0)
K
52

You can call the function from a different directory as well, in case you cannot or do not want to have the function in the same directory you are working. You can do this in two ways (perhaps there are more alternatives, but these are the ones that have worked for me).

Alternative 1 Temporarily change your working directory

import os

os.chdir("**Put here the directory where you have the file with your function**")

from file import function

os.chdir("**Put here the directory where you were working**")

Alternative 2 Add the directory where you have your function to sys.path

import sys

sys.path.append("**Put here the directory where you have the file with your function**")

from file import function
Knot answered 16/3, 2018 at 0:29 Comment(2)
isn't it the same as adding path to PYTHONPATH?Outbid
This is the one that worked for me in a special case where I wanted to 'borrow-call' some external code without copy or modification.Mush
W
43

To fix

ModuleNotFoundError: No module named

try using a dot (.) in front of the filename to do a relative import:

from .file import function
Wilbanks answered 27/9, 2018 at 21:59 Comment(2)
Any explanation about this please ?Architect
saved my day, thanks . '.' points to current working directoryLiquidize
P
40

Functions from .py file (can (of course) be in different directory) can be simply imported by writing directories first and then the file name without .py extension:

from directory_name.file_name import function_name

And later be used: function_name()

Puling answered 24/12, 2019 at 14:44 Comment(0)
B
17

Rename the module to something other than 'file'.

Then also be sure when you are calling the function that:

1)if you are importing the entire module, you reiterate the module name when calling it:

import module
module.function_name()

or

import pizza
pizza.pizza_function()

2)or if you are importing specific functions, functions with an alias, or all functions using *, you don't reiterate the module name:

from pizza import pizza_function
pizza_function()

or

from pizza import pizza_function as pf
pf()

or

from pizza import *
pizza_function()
Borlase answered 24/10, 2018 at 20:8 Comment(1)
This is the best answer as it details how to import a file FULL of functions, and how to call them.Tartrate
D
14

First save the file in .py format (for example, my_example.py). And if that file have functions,

def xyz():

        --------

        --------

def abc():

        --------

        --------

In the calling function you just have to type the below lines.

file_name: my_example2.py

============================

import my_example.py


a = my_example.xyz()

b = my_example.abc()

============================

Dicarlo answered 8/5, 2015 at 12:2 Comment(1)
I don't know if my fail is about python versions. What i do choosing this example is import fn (without extension) and using them directly on the main file fn.my_funcion(). When i use import fn.py tries to load py.py file, wich doesn't exist. Using from fn.py import funcname didn't work too. Thank you.Braiding
T
11

append a dot . in front of a file name if you want to import this file which is in the same directory where you are running your code.

For example, I'm running a file named a.py and I want to import a method named addFun which is written in b.py, and b.py is there in the same directory

from .b import addFun
Tolly answered 29/8, 2019 at 14:41 Comment(0)
G
9

Inside MathMethod.Py.

def Add(a,b):
   return a+b 

def subtract(a,b):
  return a-b

Inside Main.Py

import MathMethod as MM 
  print(MM.Add(200,1000))

Output:1200

Glaze answered 18/4, 2018 at 8:52 Comment(0)
O
6

You don't have to add file.py.

Just keep the file in the same location with the file from where you want to import it. Then just import your functions:

from file import a, b
Overwind answered 12/5, 2017 at 21:7 Comment(1)
Oh sure it doesn't. I didn't meant to type .py It's a typoOverwind
V
6

Solution1: In one file myfun.py define any function(s).

# functions
def Print_Text():
    print( 'Thank You')

def Add(a,b):
    c=a+b
    return c 

In the other file:

#Import defined functions
from myfun import *

#Call functions
Print_Text()
c=Add(1,2)

Solution2: if this above solution did not work for Colab

  1. Create a foldermyfun
  2. Inside this folder create a file __init__.py
  3. Write all your functions in __init__.py
  4. Import your functions from Colab notebook from myfun import *
Vanessa answered 22/9, 2021 at 0:55 Comment(0)
W
5

You should have the file at the same location as that of the Python files you are trying to import. Also 'from file import function' is enough.

Worldbeater answered 2/5, 2017 at 5:41 Comment(0)
M
4

Any of the above solutions didn't work for me. I got ModuleNotFoundError: No module named whtever error. So my solution was importing like below

from . import filename # without .py  

inside my first file I have defined function fun like below

# file name is firstFile.py
def fun():
  print('this is fun')

inside the second file lets say I want to call the function fun

from . import firstFile

def secondFunc():
   firstFile.fun() # calling `fun` from the first file

secondFunc() # calling the function `secondFunc` 
Mindi answered 2/7, 2020 at 0:38 Comment(0)
W
2

Suppose the file you want to call is anotherfile.py and the method you want to call is method1, then first import the file and then the method

from anotherfile import method1

if method1 is part of a class, let the class be class1, then

from anotherfile import class1

then create an object of class1, suppose the object name is ob1, then

ob1 = class1()
ob1.method1()
Wood answered 2/12, 2017 at 2:2 Comment(0)
M
2

in my case i named my file helper.scrap.py and couldn't make it work until i changed to helper.py

Matrona answered 15/11, 2018 at 16:59 Comment(1)
I don't think you can have . or - in the file namesDrawn
A
1

in my main script detectiveROB.py file i need call passGen function which generate password hash and that functions is under modules\passwordGen.py

The quickest and easiest solution for me is

Below is my directory structure

enter image description here

So in detectiveROB.py i have import my function with below syntax

from modules.passwordGen import passGen

enter image description here

Aleppo answered 24/8, 2020 at 19:4 Comment(0)
B
0

Just a quick suggestion, Those who believe in auto-import by pressing alt+ enter in Pycharm and cannot get help.

Just change the file name from where you want to import by: right-clicking on the file and clicking on refactor-> rename. Your auto-import option will start coming up

Baste answered 23/8, 2021 at 9:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.