Llamar a una función desde otro archivo en Python

499

Set_up: tengo un archivo .py para cada función que necesito usar en un programa.

En este programa, necesito llamar a la función desde los archivos externos.

He intentado:

from file.py import function(a,b)

Pero me sale el error:

ImportError: ningún módulo llamado 'file.py'; el archivo no es un paquete

¿Cómo soluciono este problema?

usuario2977230
fuente
65
from file import function. No hay necesidad de extensiones de archivo o parámetros de función
samrap
44
Probablemente debería pasar por la sección de módulos en el tutorial de Python.
Burhan Khalid
Solo asegúrese de que si usa PyCharms, solo reconocerá un nombre de archivo delimitado por subrayado.
Jerry
Además, si desea importar la función desde file.py, asegúrese de que no haya ningún paquete en su directorio con el nombre file.
SomeBruh

Respuestas:

555

No es necesario agregar file.pyal importar. Simplemente escriba from file import functiony luego llame a la función usando function(a, b). La razón por la que esto puede no funcionar es porque filees uno de los módulos principales de Python, por lo que le sugiero que cambie el nombre de su archivo.

Tenga en cuenta que si usted está tratando de funciones de importación de a.pyun archivo llamado b.py, tendrá que asegurarse de que a.pyy b.pyestán en el mismo directorio.

Juegos Brainiac
fuente
3
El "archivo" era solo un marcador de posición para la pregunta que hago, no el nombre real del archivo. Gracias de cualquier forma. Intentaré esto y te responderé.
user2977230
44
Intenté esto, pero aún muestra el error: ¿Tiene algo que ver con Python 3 o es un problema general?
DarkRose
44
@GamesBrainiac, ¿qué pasa si el archivo desde el que desea importar funciones está en un directorio diferente? ¿Puedo incluir la ruta del archivo anterior al nombre del archivo o hay algo más complicado?
Tom
66
@Tom Debe agregar esa ruta a la variable PYTHONPATH si aún no está allí.
Juegos Brainiac
13
¿Hay alguna manera de importar funciones de a.py a un archivo b.py si no están en el mismo directorio?
Nirvan Sengupta
193

Antes que nada no necesitas a .py.

Si tiene un archivo a.pyy dentro tiene algunas funciones:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

Y si quieres importarlos z.pytienes que escribir

from a import b, c
Salvador Dalí
fuente
47
también puedes importar *
Dimitar Marinov
1
@DimitarMarinov ¿Con * reemplazado por el nombre del archivo?
Karlo
3
@Karlo, no, solo *
Dimitar Marinov
26
usar "import *" se considera una mala práctica. Explícito es mejor que implícito.
Francisco Gutiérrez
Si a.py está en una carpeta que dice fol1, ¿cómo se importará? @ dimitar-marinov
Aditya C
57

Puedes hacer esto de 2 maneras. Primero es solo importar la función específica que desea de file.py. Para hacer esto use

from file import function

Otra forma es importar todo el archivo

import file as fl

Luego puede llamar a cualquier función dentro de file.py usando

fl.function(a,b)
Pulkit Bansal
fuente
36

También puede llamar a la función desde un directorio diferente, en caso de que no pueda o no quiera tener la función en el mismo directorio en el que está trabajando. Puede hacer esto de dos maneras (quizás haya más alternativas, pero estas son las que me han funcionado).

Alternativa 1 Cambie temporalmente su directorio de trabajo

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 Agregue el directorio donde tiene su función a sys.path

import sys

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

from file import function
Juan Ossa
fuente
1
¿No es lo mismo que agregar ruta a PYTHONPATH?
Birish
33

Si su archivo tiene una estructura de paquete diferente y desea llamarlo desde un paquete diferente, puede llamarlo de esa manera:

Digamos que tiene la siguiente estructura de paquete en su proyecto de Python:

Paquete de Python y estructura de archivos

en el com.my.func.DifferentFunctionarchivo python tiene alguna función, como:

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

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

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

Y desea llamar a diferentes funciones desde Example3.py, luego de la siguiente manera puede hacerlo:

Definir declaración de importación en Example3.py- archivo para importar todas las funciones

from com.my.func.DifferentFunction import *

o defina cada nombre de función que desea importar

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

Luego, en Example3.pypuede llamar a la función para ejecutar:

num1 = 20
num2 = 10

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

Salida:

 add :  30

 sub :  10

 mul :  200
abanmitra
fuente
3
Se desaconseja la importación global.
jdhao
21

Encontré la misma característica, pero tuve que hacer lo siguiente para que funcione.

Si ve 'ModuleNotFoundError: No module named', probablemente necesite el punto (.) Delante del nombre del archivo como se muestra a continuación;

de la función de importación .file

Chico ricky
fuente
13

Primero guarde el archivo en formato .py (por ejemplo, my_example.py). Y si ese archivo tiene funciones,

def xyz():

        --------

        --------

def abc():

        --------

        --------

En la función de llamada solo tiene que escribir las siguientes líneas.

nombre_archivo: mi_ejemplo2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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

Nagaraj Simpi
fuente
2
No sé si mi falla es sobre versiones de Python. Lo que hago al elegir este ejemplo es import fn(sin extensión) y usarlos directamente en el archivo principal fn.my_funcion(). Cuando uso import fn.pyintenta cargar el archivo py.py, que no existe. Usar from fn.py import funcnameno funcionó también. Gracias.
m3nda
13

Cambie el nombre del módulo a otro que no sea 'archivo'.

Entonces también asegúrese de llamar a la función que:

1) si está importando el módulo completo, reitera el nombre del módulo al llamarlo:

import module
module.function_name()

o

import pizza
pizza.pizza_function()

2) o si está importando funciones específicas, funciones con un alias o todas las funciones que usan *, no reitera el nombre del módulo:

from pizza import pizza_function
pizza_function()

o

from pizza import pizza_function as pf
pf()

o

from pizza import *
pizza_function()
misterrodger
fuente
9

Las funciones del archivo .py (puede (por supuesto) estar en un directorio diferente) se pueden importar simplemente escribiendo directorios primero y luego el nombre del archivo sin la extensión .py:

from directory_name.file_name import function_name

Y luego se utilizará: function_name()

Weky
fuente
8

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

Salida: 1200

Mahabubuzzaman
fuente
6

No tienes que agregar file.py.

Simplemente mantenga el archivo en la misma ubicación con el archivo desde donde desea importarlo. Luego solo importa tus funciones:

from file import a, b
Mohan
fuente
Oh claro que no. No quise escribir .py Es un error tipográfico
Mohan
4

Debe tener el archivo en la misma ubicación que la de los archivos de Python que está intentando importar. También 'desde la función de importación de archivos' es suficiente.

Girish M
fuente
4

agregue un punto (.) delante del nombre de un archivo si desea importar este archivo que está en el mismo directorio donde está ejecutando su código.

Por ejemplo, estoy ejecutando un archivo llamado a.py y quiero importar un método llamado addFun que está escrito en b.py, y b.py está en el mismo directorio

desde .b import addFun

Shravan Kumar
fuente
2

Supongamos que el archivo al que desea llamar es anotherfile.py y el método al que desea llamar es method1, luego importe primero el archivo y luego el método

from anotherfile import method1

si método1 es parte de una clase, deje que la clase sea clase1, luego

from anotherfile import class1

luego cree un objeto de clase1, suponga que el nombre del objeto es ob1, luego

ob1 = class1()
ob1.method1()
Amir Md Amiruzzaman
fuente
2

en mi caso nombré mi archivo helper.scrap.pyy no pude hacerlo funcionar hasta que cambié ahelper.py

bresleveloper
fuente
1
No creo que puedas tener. o, en los nombres de los archivos
JeffCharter el