从Python中的另一个文件调用函数

时间:2013-12-01 06:34:11

标签: python file function import

Set_up:我有一个.py文件,用于我需要在程序中使用的每个函数。

在这个程序中,我需要从外部文件中调用该函数。

我试过了:

from file.py import function(a,b)

但我收到错误:

  

ImportError:没有名为'file.py'的模块;文件不是包

如何解决此问题?

17 个答案:

答案 0 :(得分:400)

导入时无需添加file.py。只需编写from file import function,然后使用function(a, b)调用该函数。这可能不起作用的原因是因为file是Python的核心模块之一,所以我建议你更改文件的名称。

请注意,如果您尝试将a.py中的函数导入名为b.py的文件,则需要确保a.pyb.py位于同一目录。

答案 1 :(得分:146)

首先,您不需要.py

如果你有一个文件a.py并且里面有一些功能:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

您想要在z.py中导入它们

from a import b, c

答案 2 :(得分:36)

您可以通过两种方式完成此操作。首先只是从file.py导入你想要的特定功能。为此,请使用

from file import function

另一种方法是导入整个文件

import file as fl

然后你可以使用

调用file.py中的任何函数
fl.function(a,b)

答案 3 :(得分:13)

您也可以从不同的目录中调用该函数,以防您不能或不想将该函数放在您正在使用的同一目录中。你可以用两种方式做到这一点(也许有更多的选择,但这些对我有用)。

备选方案1 暂时更改您的工作目录

LastRow = Application.WorksheetFunction.CountA(Sheet1.Range("A:A"))

备选方案2 将具有函数的目录添加到sys.path

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**")

答案 4 :(得分:10)

首先以.py格式保存文件(例如,my_example.py)。 如果该文件有功能,

def xyz():

        --------

        --------

def abc():

        --------

        --------

在调用函数中,您只需键入以下行。

file_name:my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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

答案 5 :(得分:10)

可以使用相同的功能,但是我必须执行以下操作才能使其正常工作。

如果看到“ ModuleNotFoundError:未命名模块”,则可能需要在文件名前面加点号(。),如下所示;

  

来自 .file 导入功能

答案 6 :(得分:5)

您不必添加file.py

只需将文件与要导入文件的文件保持在同一位置即可。然后只需导入你的功能:

from file import a, b

答案 7 :(得分:5)

将模块重命名为“文件”以外的其他名称。

然后还要确保在调用该函数时:

1)如果要导入整个模块,则在调用它时要重申模块名称:

import module
module.function_name()

import pizza
pizza.pizza_function()

2)或如果要导入特定功能,带别名的功能或所有使用*的功能,则无需重复模块名称:

from pizza import pizza_function
pizza_function()

from pizza import pizza_function as pf
pf()

from pizza import *
pizza_function()

答案 8 :(得分:4)

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))

输出:1200

答案 9 :(得分:4)

如果您的文件位于不同的包结构中,并且您想从其他包中调用它,则可以按照以下方式调用它:

假设您在python项目中具有以下包结构:

Python package and file structure

在-com.my.func.DifferentFunction python文件中,您具有一些功能,例如:

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

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

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

您想从Example3.py调用不同的函数,然后按照以下方式进行操作:

Example3.py中定义import语句-用于导入所有功能的文件

from com.my.func.DifferentFunction import *

或定义要导入的每个函数名称

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

然后在Example3.py中,您可以调用函数执行:

num1 = 20
num2 = 10

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

输出:

 add :  30

 sub :  10

 mul :  200

答案 10 :(得分:3)

如果要导入该文件(在运行代码的目录中),请在文件名前附加一个点(。)。

例如,我正在运行一个名为a.py的文件,我想导入一个名为addFun的方法,该方法用b.py编写,并且b.py在同一目录中

从.b导入addFun

答案 11 :(得分:2)

您应该将文件放在与您尝试导入的Python文件相同的位置。 “来自文件导入功能”就足够了。

答案 12 :(得分:1)

在我的情况下,我将文件命名为helper.scrap.py,直到我更改为helper.py

后,该文件才能正常工作

答案 13 :(得分:1)

以上任何解决方案都不适合我。我遇到了ModuleNotFoundError: No module named whtever错误。 所以我的解决方案是像下面这样导入

from . import filename # without .py  

在我的第一个文件中,我定义了如下函数fun

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

在第二个文件中,我要调用函数fun

from . import firstFile

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

secondFunc() # calling the function `secondFunc` 

答案 14 :(得分:0)

假设您要调用的文件是anotherfile.py,并且要调用的方法是method1,然后首先导入文件然后导入方法

from anotherfile import method1

如果method1是类的一部分,那么让类为class1,然后是

from anotherfile import class1

然后创建class1的对象,假设对象名称是ob1,然后是

ob1 = class1()
ob1.method1()

答案 15 :(得分:0)

.py文件中的功能(可以(当然)可以在不同目录中)可以通过首先写入目录,然后输入不带.py扩展名的文件名来简单地导入:

from directory_name.file_name import function_name

稍后使用:function_name()

答案 16 :(得分:0)

在我的主脚本detectiveROB.py文件中,我需要调用passGen函数,该函数生成密码哈希并且该函数位于modules\passwordGen.py

对我来说最快,最简单的解决方案是

下面是我的目录结构

enter image description here

因此在detectiveROB.py中,我使用以下语法导入了函数

from modules.passwordGen import passGen

enter image description here