Chame uma função de outro arquivo no Python


498

Set_up: Eu tenho um arquivo .py para cada função que preciso usar em um programa.

Neste programa, preciso chamar a função a partir dos arquivos externos.

Eu tentei:

from file.py import function(a,b)

Mas eu recebo o erro:

ImportError: nenhum módulo chamado 'file.py'; arquivo não é um pacote

Como corrijo esse problema?


65
from file import function. Não há necessidade de extensões de arquivo ou parâmetros de função
samrap

4
Você provavelmente deve passar pela seção de módulos no tutorial do Python.
Burhan Khalid

Apenas verifique se, se estiver usando PyCharms, ele reconhecerá apenas um nome de arquivo delimitado por sublinhado.
Jerry

Além disso, se você deseja importar a função do file.py, certifique-se não há nenhum pacote em seu diretório com o nome file.
SomeBruh 23/04

Respostas:


554

Não há necessidade de adicionar file.pydurante a importação. Basta escrever from file import functione chamar a função usando function(a, b). A razão pela qual isso pode não funcionar é porque fileé um dos módulos principais do Python, então sugiro que você altere o nome do seu arquivo.

Observe que, se você estiver tentando importar funções de a.pypara um arquivo chamado b.py, precisará verificar isso a.pye b.pyestar no mesmo diretório.


3
O "arquivo" foi apenas um espaço reservado para a pergunta que estou fazendo, não o nome do arquivo real. Obrigado mesmo assim. Vou tentar isso e voltar para você.
user2977230

4
Eu tentei isso, mas ainda está mostrando o erro: Tem algo a ver com Python 3 ou é um problema geral?
DarkRose

4
@GamesBrainiac, e se o arquivo do qual você deseja importar funções estiver em um diretório diferente? Posso incluir o caminho do arquivo que antecede o nome do arquivo ou há algo mais complicado?
Tom

6
@ Tom Você precisa adicionar esse caminho à variável PYTHONPATH, se ainda não estiver lá.
Games Brainiac

13
Existe uma maneira de importar funções de a.py para um arquivo b.py se elas não estiverem no mesmo diretório?
Nirvan Sengupta

193

Primeiro de tudo você não precisa de .py.

Se você tem um arquivo a.pye dentro, você tem algumas funções:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

E você deseja importá-los, z.pyvocê deve escrever

from a import b, c

47
você também pode importar *
Dimitar Marinov

1
@DimitarMarinov Com * substituído pelo nome do arquivo?
Karlo

3
@Karlo, não, apenas * #
Dimitar Marinov

26
o uso de "import *" é considerado uma má prática. Explícito é melhor que implícito.
Francisco Gutiérrez

Se a.py estiver em uma pasta, diga fol1, como será importado? @ dimitar-marinov #
Aditya C

57

Você pode fazer isso de duas maneiras. Primeiro, basta importar a função específica que você deseja do arquivo.py. Para fazer isso, use

from file import function

Outra maneira é importar o arquivo inteiro

import file as fl

Em seguida, você pode chamar qualquer função dentro de file.py usando

fl.function(a,b)

36

Você também pode chamar a função de um diretório diferente, caso não possa ou não queira ter a função no mesmo diretório em que está trabalhando. Você pode fazer isso de duas maneiras (talvez haja mais alternativas, mas estas são as que funcionaram para mim).

Alternativa 1 Altere temporariamente seu diretório de trabalho

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

Alternativa 2 Adicione o diretório em que você tem sua função ao sys.path

import sys

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

from file import function

1
não é o mesmo que adicionar caminho ao PYTHONPATH?
#

33

Se o seu arquivo estiver na estrutura de pacotes diferentes e você quiser chamá-lo de um pacote diferente, poderá chamá-lo dessa maneira:

Digamos que você tenha a seguinte estrutura de pacotes no seu projeto python:

Estrutura de pacotes e arquivos Python

com.my.func.DifferentFunctionarquivo in - python, você tem alguma função, como:

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

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

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

E você deseja chamar funções diferentes de Example3.py , então, da seguinte maneira, você pode fazê-lo:

Definir declaração de importação no Example3.pyarquivo - para importar todas as funções

from com.my.func.DifferentFunction import *

ou defina cada nome de função que você deseja importar

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

Então, Example3.pyvocê pode chamar a função para executar:

num1 = 20
num2 = 10

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

Resultado:

 add :  30

 sub :  10

 mul :  200

3
a importação glob é desencorajada.
Jdhao

21

Me deparei com o mesmo recurso, mas eu tive que fazer o abaixo para fazê-lo funcionar.

Se você estiver vendo 'ModuleNotFoundError: Nenhum módulo chamado', provavelmente precisará do ponto (.) Na frente do nome do arquivo, como abaixo;

da função de importação de arquivo.


13

Primeiro salve o arquivo no formato .py (por exemplo, my_example.py). E se esse arquivo tiver funções,

def xyz():

        --------

        --------

def abc():

        --------

        --------

Na função de chamada, basta digitar as linhas abaixo.

file_name: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
Não sei se minha falha é sobre versões em python. O que eu faço escolhendo este exemplo é import fn(sem extensão) e usando-os diretamente no arquivo principal fn.my_funcion(). Quando eu uso import fn.pytenta carregar o arquivo py.py, o que não existe. Usar from fn.py import funcnamenão funcionou também. Obrigado.
M3nda 9/06

13

Renomeie o módulo para algo diferente de 'arquivo'.

Além disso, certifique-se de chamar a função que:

1) se você estiver importando o módulo inteiro, reitera o nome do módulo ao chamá-lo:

import module
module.function_name()

ou

import pizza
pizza.pizza_function()

2) ou se estiver importando funções específicas, funções com um alias ou todas as funções usando *, você não reitera o nome do módulo:

from pizza import pizza_function
pizza_function()

ou

from pizza import pizza_function as pf
pf()

ou

from pizza import *
pizza_function()

9

As funções do arquivo .py (podem (é claro) estar em um diretório diferente) podem ser simplesmente importadas escrevendo primeiro os diretórios e depois o nome do arquivo sem a extensão .py:

from directory_name.file_name import function_name

E depois ser usado: function_name()


8

Por dentro do MathMethod.Py.

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

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

Dentro de Main.Py

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

Saída: 1200


6

Você não precisa adicionar file.py.

Apenas mantenha o arquivo no mesmo local do arquivo de onde deseja importá-lo. Em seguida, basta importar suas funções:

from file import a, b

Ah, claro que não. Eu não quis dizer para digitar .py É um erro de digitação
Mohan

4

Você deve ter o arquivo no mesmo local dos arquivos Python que você está tentando importar. Também 'da função de importação de arquivo' é suficiente.


4

anexe um ponto (.) na frente de um nome de arquivo, se você quiser importar esse arquivo, que está no mesmo diretório em que você está executando seu código.

Por exemplo, estou executando um arquivo chamado a.py e quero importar um método chamado addFun que está escrito em b.py, e b.py está no mesmo diretório

de .b import addFun


2

Suponha que o arquivo que você deseja chamar seja outro arquivo.py e o método que você deseja chamar seja method1, depois importe o arquivo e, em seguida, o método

from anotherfile import method1

se method1 fizer parte de uma classe, deixe a classe ser class1, então

from anotherfile import class1

crie um objeto da classe1, suponha que o nome do objeto seja ob1 e, em seguida,

ob1 = class1()
ob1.method1()

2

no meu caso, nomeei meu arquivo helper.scrap.pye não consegui fazê-lo funcionar até que eu mudei parahelper.py


1
Eu não acho que você pode ter. ou - nos nomes dos arquivos
JeffCharter 18/11/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.