Chiama una funzione da un altro file in Python


499

Set_up: ho un file .py per ogni funzione che devo usare in un programma.

In questo programma, ho bisogno di chiamare la funzione da file esterni.

Ho provato:

from file.py import function(a,b)

Ma ottengo l'errore:

ImportError: nessun modulo chiamato 'file.py'; il file non è un pacchetto

Come posso risolvere questo problema?


65
from file import function. Nessuna necessità di estensioni di file o parametri di funzione
samrap

4
Probabilmente dovresti passare attraverso la sezione dei moduli nel tutorial di Python.
Burhan Khalid,

Assicurati solo che se usi PyCharms, riconoscerebbe solo un nome delimitato da sottolineatura.
Jerry,

Inoltre, se si desidera importare la funzione da file.py, assicurarsi che non vi siano pacchetti nella directory con il nome file.
SomeBruh,

Risposte:


555

Non è necessario aggiungere file.pydurante l'importazione. Basta scrivere from file import functione quindi chiamare la funzione utilizzando function(a, b). Il motivo per cui questo potrebbe non funzionare, è perché fileè uno dei moduli principali di Python, quindi ti suggerisco di cambiare il nome del tuo file.

Si noti che se si sta cercando di funzioni di importazione da a.pyun file chiamato b.py, è necessario fare in modo che a.pye b.pysono nella stessa directory.


3
Il "file" era solo un segnaposto per la domanda che sto ponendo, non l'attuale nome del file. Grazie comunque. Ci proverò e ti risponderò.
user2977230

4
Ho provato questo, ma mostra ancora l'errore: ha qualcosa a che fare con Python 3 o è un problema generale?
DarkRose,

4
@GamesBrainiac, cosa succede se il file da cui si desidera importare le funzioni si trova in una directory diversa? Posso includere il percorso del file che precede il nome del file o c'è qualcosa di più complicato?
Tom,

6
@ Tom Devi aggiungere quel percorso alla variabile PYTHONPATH se non è già presente.
Giochi Brainiac,

13
C'è un modo per importare le funzioni da a.py in un file b.py se non si trovano nella stessa directory?
Nirvan Sengupta,

193

Prima di tutto non hai bisogno di a .py.

Se hai un file a.pye al suo interno hai alcune funzioni:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

E vuoi importarli in z.pydevi scrivere

from a import b, c

47
puoi anche importare *
Dimitar Marinov il

1
@DimitarMarinov Con * sostituito dal nome file?
Karlo,

3
@Karlo, no, solo *
Dimitar Marinov

26
l'utilizzo di "import *" è considerato una cattiva pratica. Esplicito è meglio che implicito.
Francisco Gutiérrez,

Se a.py si trova in una cartella dire fol1, come deve essere importato? @ dimitar-marinov
Aditya C,

57

Puoi farlo in 2 modi. Il primo è solo quello di importare la specifica funzione desiderata da file.py. Per fare questo usare

from file import function

Un altro modo è importare l'intero file

import file as fl

Quindi è possibile chiamare qualsiasi funzione all'interno di file.py utilizzando

fl.function(a,b)

36

È possibile chiamare la funzione anche da una directory diversa, nel caso in cui non si possa o non si desideri avere la funzione nella stessa directory in cui si sta lavorando. Puoi farlo in due modi (forse ci sono più alternative, ma queste sono quelle che hanno funzionato per me).

Alternativa 1 Cambia temporaneamente la tua directory di lavoro

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 Aggiungi la directory in cui hai la tua funzione a sys.path

import sys

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

from file import function

1
non è lo stesso dell'aggiunta del percorso a PYTHONPATH?
Birish,

33

Se il tuo file si trova nella diversa struttura del pacchetto e desideri chiamarlo da un altro pacchetto, puoi chiamarlo in quel modo:

Supponiamo che tu abbia la seguente struttura di pacchetti nel tuo progetto python:

Pacchetto Python e struttura dei file

nel com.my.func.DifferentFunctionfile - python hai qualche funzione, come:

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

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

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

E vuoi chiamare diverse funzioni da Example3.py, quindi seguendo il modo in cui puoi farlo:

Definire l'istruzione import in Example3.py- file per importare tutte le funzioni

from com.my.func.DifferentFunction import *

o definire il nome di ciascuna funzione che si desidera importare

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

Quindi in Example3.pypuoi chiamare la funzione per eseguire:

num1 = 20
num2 = 10

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

Produzione:

 add :  30

 sub :  10

 mul :  200

3
l'importazione globale è scoraggiata.
jdhao,

21

Sono venuto attraverso la stessa funzione, ma ho dovuto fare quanto segue per farlo funzionare.

Se vedi 'ModuleNotFoundError: nessun modulo chiamato', probabilmente avrai bisogno del punto (.) Davanti al nome del file come sotto;

da .file import funtion


13

Prima salva il file in formato .py (ad esempio, my_example.py). E se quel file ha funzioni,

def xyz():

        --------

        --------

def abc():

        --------

        --------

Nella funzione di chiamata devi solo digitare le righe sottostanti.

file_name: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
Non so se il mio fallimento riguarda le versioni di Python. Quello che faccio scegliendo questo esempio è import fn(senza estensione) e usandoli direttamente sul file principale fn.my_funcion(). Quando uso import fn.pytenta di caricare il file py.py, che non esiste. Anche l'uso from fn.py import funcnamenon ha funzionato. Grazie.
m3nda,

13

Rinomina il modulo in qualcosa di diverso da "file".

Quindi assicurati anche di chiamare la funzione che:

1) se stai importando l'intero modulo, ribadisci il nome del modulo quando lo chiami:

import module
module.function_name()

o

import pizza
pizza.pizza_function()

2) o se stai importando funzioni specifiche, funzioni con un alias o tutte le funzioni che utilizzano *, non devi ripetere il nome del modulo:

from pizza import pizza_function
pizza_function()

o

from pizza import pizza_function as pf
pf()

o

from pizza import *
pizza_function()

9

Le funzioni dal file .py (possono (ovviamente) essere in directory diverse) possono essere semplicemente importate scrivendo prima le directory e poi il nome del file senza estensione .py:

from directory_name.file_name import function_name

E più tardi essere usato: function_name()


8

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

Uscita: 1200


6

Non devi aggiungere file.py.

Conserva il file nella stessa posizione del file da cui desideri importarlo. Quindi importa solo le tue funzioni:

from file import a, b

Oh certo che non lo fa. Non intendevo scrivere .py È un refuso
Mohan,

4

Dovresti avere il file nella stessa posizione di quello dei file Python che stai tentando di importare. Anche 'dalla funzione di importazione dei file' è sufficiente.


4

aggiungere un punto (.) davanti al nome di un file se si desidera importare questo file che si trova nella stessa directory in cui si sta eseguendo il codice.

Ad esempio, sto eseguendo un file chiamato a.py e voglio importare un metodo chiamato addFun che è scritto in b.py e b.py è presente nella stessa directory

da .b import addFun


2

Supponiamo che il file che si desidera chiamare sia anotherfile.py e che il metodo che si desidera chiamare sia method1, quindi importare prima il file e quindi il metodo

from anotherfile import method1

se method1 fa parte di una classe, lascia che la classe sia class1, quindi

from anotherfile import class1

quindi creare un oggetto di classe1, supponiamo che il nome dell'oggetto sia ob1, quindi

ob1 = class1()
ob1.method1()

2

nel mio caso ho chiamato il mio file helper.scrap.pye non ho potuto farlo funzionare fino a quando non sono passato ahelper.py


1
Non penso che tu possa avere. oppure - nei nomi dei file
JeffCharter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.