Appeler une fonction à partir d'un autre fichier en Python

499

Set_up: J'ai un fichier .py pour chaque fonction que je dois utiliser dans un programme.

Dans ce programme, je dois appeler la fonction à partir des fichiers externes.

J'ai essayé:

from file.py import function(a,b)

Mais je reçois l'erreur:

ImportError: aucun module nommé 'file.py'; le fichier n'est pas un package

Comment résoudre ce problème?

user2977230
la source
65
from file import function. Pas besoin d'extensions de fichier ou de paramètres de fonction
samrap
4
Vous devriez probablement parcourir la section des modules du didacticiel Python.
Burhan Khalid
Assurez-vous simplement que si vous utilisez PyCharms, il ne reconnaîtra qu'un nom de fichier délimité par des traits de soulignement.
Jerry
De plus, si vous souhaitez importer la fonction depuis le file.py, assurez-vous qu'il n'y a pas de package dans votre répertoire avec le nom file.
SomeBruh

Réponses:

555

Il n'est pas nécessaire d'ajouter file.pylors de l'importation. Il vous suffit d'écrire from file import function, puis d'appeler la fonction à l'aide de function(a, b). La raison pour laquelle cela peut ne pas fonctionner, c'est parce qu'il files'agit d'un des modules de base de Python, donc je vous suggère de changer le nom de votre fichier.

Notez que si vous essayez d'importer des fonctions à partir a.pyd'un fichier appelé b.py, vous devrez vous en assurer a.pyet b.pyêtre dans le même répertoire.

Games Brainiac
la source
3
Le "fichier" était juste un espace réservé pour la question que je pose, pas le nom de fichier réel. Merci quand même. Je vais essayer ceci et vous contacter.
user2977230
4
J'ai essayé cela, mais il affiche toujours l'erreur: cela a-t-il quelque chose à voir avec Python 3, ou est-ce un problème général?
DarkRose
4
@GamesBrainiac, que faire si le fichier à partir duquel vous souhaitez importer des fonctions se trouve dans un répertoire différent? Puis-je inclure le chemin de fichier précédant le nom de fichier, ou y a-t-il quelque chose de plus compliqué?
Tom
6
@Tom Vous devez ajouter ce chemin à la variable PYTHONPATH s'il n'y figure pas déjà.
Jeux Brainiac
13
Existe-t-il un moyen d'importer des fonctions de a.py vers un fichier b.py si elles ne se trouvent pas dans le même répertoire?
Nirvan Sengupta
193

Tout d'abord, vous n'avez pas besoin d'un .py.

Si vous avez un fichier a.pyet à l'intérieur vous avez quelques fonctions:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

Et vous voulez les importer, z.pyvous devez écrire

from a import b, c
Salvador Dali
la source
47
vous pouvez également importer *
Dimitar Marinov
1
@DimitarMarinov Avec * remplacé par le nom de fichier?
Karlo
3
@Karlo, non, juste *
Dimitar Marinov
26
l'utilisation de "import *" est considérée comme une mauvaise pratique. Explicite vaut mieux qu'implicite.
Francisco Gutiérrez
Si a.py est dans un dossier disons fol1, alors comment doit-il être importé? @ dimitar-marinov
Aditya C
57

Vous pouvez le faire de 2 manières. La première consiste simplement à importer la fonction spécifique que vous souhaitez à partir de file.py. Pour ce faire, utilisez

from file import function

Une autre façon consiste à importer l'intégralité du fichier

import file as fl

Ensuite, vous pouvez appeler n'importe quelle fonction dans file.py en utilisant

fl.function(a,b)
Pulkit Bansal
la source
36

Vous pouvez également appeler la fonction à partir d'un répertoire différent, au cas où vous ne pourriez pas ou ne voulez pas avoir la fonction dans le même répertoire que vous travaillez. Vous pouvez le faire de deux manières (il existe peut-être d'autres alternatives, mais ce sont celles qui ont fonctionné pour moi).

Alternative 1 Modifiez temporairement votre répertoire de travail

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 Ajoutez le répertoire où vous avez votre fonction à 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
la source
1
n'est-ce pas la même chose que d'ajouter un chemin à PYTHONPATH?
Birish
33

Si votre fichier se trouve dans une structure de package différente et que vous souhaitez l'appeler à partir d'un package différent, vous pouvez l'appeler de cette façon:

Supposons que vous ayez la structure de package suivante dans votre projet python:

Paquet Python et structure de fichiers

dans le com.my.func.DifferentFunctionfichier - python, vous avez une fonction, comme:

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

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

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

Et vous voulez appeler différentes fonctions à partir de la Example3.pyfaçon suivante:

Définir l'instruction d'importation dans le Example3.pyfichier pour la fonction d'importation de tous

from com.my.func.DifferentFunction import *

ou définissez chaque nom de fonction que vous souhaitez importer

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

Ensuite, Example3.pyvous pouvez appeler la fonction pour exécuter:

num1 = 20
num2 = 10

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

Production:

 add :  30

 sub :  10

 mul :  200
abanmitra
la source
3
l'importation de glob est déconseillée.
jdhao
21

Je suis tombé sur la même fonctionnalité mais j'ai dû faire ce qui suit pour le faire fonctionner.

Si vous voyez «ModuleNotFoundError: aucun module nommé», vous avez probablement besoin du point (.) Devant le nom de fichier comme ci-dessous;

à partir de la fonction d' importation de fichiers

Ricky Boy
la source
13

Enregistrez d'abord le fichier au format .py (par exemple, my_example.py). Et si ce fichier a des fonctions,

def xyz():

        --------

        --------

def abc():

        --------

        --------

Dans la fonction d'appel, il vous suffit de taper les lignes ci-dessous.

nom_fichier: mon_exemple2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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

Nagaraj Simpi
la source
2
Je ne sais pas si mon échec concerne les versions de python. Ce que je fais en choisissant cet exemple est import fn(sans extension) et en les utilisant directement sur le fichier principal fn.my_funcion(). Lorsque j'utilise import fn.pytente de charger le fichier py.py, qui n'existe pas. L'utilisation from fn.py import funcnamen'a pas fonctionné aussi. Je vous remercie.
m3nda
13

Renommez le module en autre chose que «fichier».

Assurez-vous également lorsque vous appelez la fonction que:

1) si vous importez le module entier, vous réitérez le nom du module lors de son appel:

import module
module.function_name()

ou

import pizza
pizza.pizza_function()

2) ou si vous importez des fonctions spécifiques, des fonctions avec un alias ou toutes les fonctions en utilisant *, vous ne répétez pas le nom du module:

from pizza import pizza_function
pizza_function()

ou

from pizza import pizza_function as pf
pf()

ou

from pizza import *
pizza_function()
misterrodger
la source
9

Les fonctions du fichier .py (peuvent (bien sûr) se trouver dans un répertoire différent) peuvent être simplement importées en écrivant d'abord les répertoires puis le nom du fichier sans extension .py:

from directory_name.file_name import function_name

Et plus tard être utilisé: function_name()

Weky
la source
8

À l'intérieur de MathMethod.Py.

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

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

À l'intérieur de Main.Py

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

Sortie: 1200

Mahabubuzzaman
la source
6

Vous n'avez pas à ajouter file.py.

Gardez simplement le fichier au même emplacement que le fichier d'où vous souhaitez l'importer. Ensuite, importez simplement vos fonctions:

from file import a, b
Mohan
la source
Oh bien sûr que non. Je ne voulais pas taper .py C'est une faute de frappe
Mohan
4

Vous devez avoir le fichier au même emplacement que celui des fichiers Python que vous essayez d'importer. «La fonction d'importation de fichiers» suffit également.

Girish M
la source
4

ajoutez un point (.) devant un nom de fichier si vous souhaitez importer ce fichier qui se trouve dans le même répertoire où vous exécutez votre code.

Par exemple, j'exécute un fichier nommé a.py et je veux importer une méthode nommée addFun qui est écrite dans b.py, et b.py est là dans le même répertoire

à partir de .b import addFun

Shravan Kumar
la source
2

Supposons que le fichier que vous souhaitez appeler soit anotherfile.py et que la méthode que vous souhaitez appeler soit method1, puis importez d'abord le fichier, puis la méthode

from anotherfile import method1

si method1 fait partie d'une classe, que la classe soit class1, alors

from anotherfile import class1

puis créez un objet de classe1, supposez que le nom de l'objet est ob1, puis

ob1 = class1()
ob1.method1()
Amir Md Amiruzzaman
la source
2

dans mon cas, j'ai nommé mon fichier helper.scrap.pyet je n'ai pas pu le faire fonctionner jusqu'à ce que je passe àhelper.py

bresleveloper
la source
1
Je ne pense pas que vous puissiez en avoir. ou - dans les noms de fichiers
JeffCharter