Panggil fungsi dari file lain dengan Python

499

Set_up: Saya memiliki file .py untuk setiap fungsi yang perlu saya gunakan dalam suatu program.

Dalam program ini, saya perlu memanggil fungsi dari file eksternal.

Saya sudah mencoba:

from file.py import function(a,b)

Tapi saya mendapatkan kesalahan:

ImportError: Tidak ada modul bernama 'file.py'; file bukan paket

Bagaimana saya memperbaiki masalah ini?

pengguna2977230
sumber
65
from file import function. Tidak perlu untuk ekstensi file atau parameter fungsi
samrap
4
Anda mungkin harus melalui bagian modul di tutorial Python.
Burhan Khalid
Pastikan saja jika menggunakan PyCharms, maka itu hanya akan mengenali nama file yang dibatasi garis bawah.
Jerry
Juga jika Anda ingin mengimpor fungsi dari file.py, pastikan tidak ada paket di direktori Anda dengan namanya file.
SomeBruh

Jawaban:

555

Tidak perlu menambahkan file.pysaat mengimpor. Cukup tulis from file import function, lalu panggil fungsi menggunakan function(a, b). Alasan mengapa ini mungkin tidak berhasil, adalah karenafile merupakan salah satu modul inti Python, jadi saya sarankan Anda mengubah nama file Anda.

Perhatikan bahwa jika Anda mencoba mengimpor fungsi dari a.pyke file yang dipanggil b.py, Anda harus memastikan bahwa a.pydan b.pyberada di direktori yang sama.

Game Brainiac
sumber
3
"File" hanyalah pengganti untuk pertanyaan yang saya ajukan, bukan nama file yang sebenarnya. Terima kasih. Saya akan mencoba ini dan kembali kepada Anda.
user2977230
4
Saya mencoba ini, tetapi masih menunjukkan kesalahan: Apakah ada hubungannya dengan Python 3, atau masalah umum?
DarkRose
4
@GamesBrainiac, bagaimana jika file yang ingin Anda impor fungsinya ada di direktori yang berbeda? Bisakah saya menyertakan filepath sebelum nama file, atau ada sesuatu yang lebih rumit?
Tom
6
@ Tom Anda harus menambahkan path itu ke variabel PYTHONPATH jika belum ada di sana.
Game Brainiac
13
Apakah ada cara untuk mengimpor fungsi dari a.py ke file b.py jika tidak ada dalam direktori yang sama?
Nirvan Sengupta
193

Pertama-tama Anda tidak perlu .py.

Jika Anda memiliki file a.pydan di dalamnya Anda memiliki beberapa fungsi:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

Dan Anda ingin mengimpornya z.pyAnda harus menulis

from a import b, c
Salvador Dali
sumber
47
Anda juga dapat mengimpor *
Dimitar Marinov
1
@DimitarMarinov Dengan * diganti dengan nama file?
Karlo
3
@ Karlo, tidak, hanya *
Dimitar Marinov
26
menggunakan "impor *" dianggap praktik yang buruk. Eksplisit lebih baik daripada implisit.
Francisco Gutiérrez
Jika a.py ada di folder say fol1, lalu bagaimana itu akan diimpor? @ dimitar-marinov
Aditya C
57

Anda dapat melakukan ini dengan 2 cara. Pertama hanya mengimpor fungsi spesifik yang Anda inginkan dari file.py. Untuk melakukan ini gunakan

from file import function

Cara lain adalah mengimpor seluruh file

import file as fl

Kemudian Anda dapat memanggil fungsi apa pun di dalam file.py menggunakan

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

Anda dapat memanggil fungsi dari direktori yang berbeda juga, jika Anda tidak bisa atau tidak ingin memiliki fungsi di direktori yang sama dengan yang sedang Anda kerjakan. Anda dapat melakukan ini dengan dua cara (mungkin ada lebih banyak alternatif, tetapi ini adalah yang telah bekerja untuk saya).

Alternatif 1 Ubah sementara direktori kerja Anda

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

Alternatif 2 Tambahkan direktori di mana Anda memiliki fungsi Anda di 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
sumber
1
bukankah itu sama dengan menambahkan path ke PYTHONPATH?
Birish
33

Jika file Anda berada dalam struktur paket yang berbeda dan Anda ingin memanggilnya dari paket yang berbeda, maka Anda dapat menyebutnya dengan cara itu:

Katakanlah Anda memiliki struktur paket berikut dalam proyek python Anda:

Paket python dan struktur file

dalam com.my.func.DifferentFunctionfile python Anda memiliki beberapa fungsi, seperti:

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

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

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

Dan Anda ingin memanggil fungsi yang berbeda Example3.py, kemudian dengan cara berikut Anda dapat melakukannya:

Tetapkan in Example3.py-file pernyataan impor untuk mengimpor semua fungsi

from com.my.func.DifferentFunction import *

atau tentukan setiap nama fungsi yang ingin Anda impor

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

Kemudian di Example3.pyAnda dapat memanggil fungsi untuk mengeksekusi:

num1 = 20
num2 = 10

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

Keluaran:

 add :  30

 sub :  10

 mul :  200
abanmitra
sumber
3
impor glob tidak disarankan.
jdhao
21

Datang di fitur yang sama tetapi saya harus melakukan di bawah ini untuk membuatnya berfungsi.

Jika Anda melihat 'ModuleNotFoundError: Tidak ada modul bernama', Anda mungkin memerlukan titik (.) Di depan nama file seperti di bawah ini;

dari .file import funtion

Ricky Boy
sumber
13

Pertama-tama simpan file dalam format .py (misalnya, my_example.py). Dan jika file itu memiliki fungsi,

def xyz():

        --------

        --------

def abc():

        --------

        --------

Dalam fungsi panggilan Anda cukup mengetikkan baris di bawah ini.

file_name: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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

Nagaraj Simpi
sumber
2
Saya tidak tahu apakah kegagalan saya adalah tentang versi python. Apa yang saya lakukan memilih contoh ini adalah import fn(tanpa ekstensi) dan menggunakannya langsung pada file utama fn.my_funcion(). Ketika saya menggunakan import fn.pymencoba untuk memuat file py.py, yang tidak ada. Menggunakan from fn.py import funcnametidak berhasil juga. Terima kasih.
m3nda
13

Ubah nama modul menjadi sesuatu selain 'file'.

Kemudian juga pastikan ketika Anda memanggil fungsi itu:

1) jika Anda mengimpor seluruh modul, Anda tegaskan kembali nama modul saat memanggilnya:

import module
module.function_name()

atau

import pizza
pizza.pizza_function()

2) atau jika Anda mengimpor fungsi tertentu, fungsi dengan alias, atau semua fungsi menggunakan *, Anda tidak mengulangi nama modul:

from pizza import pizza_function
pizza_function()

atau

from pizza import pizza_function as pf
pf()

atau

from pizza import *
pizza_function()
misterrodger
sumber
9

Fungsi dari file .py (dapat (tentu saja) berada di direktori yang berbeda) dapat dengan mudah diimpor dengan menulis direktori terlebih dahulu dan kemudian nama file tanpa ekstensi .py:

from directory_name.file_name import function_name

Dan nantinya digunakan: function_name()

Weky
sumber
8

Di dalam MathMethod.Py.

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

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

Di dalam Main

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

Output: 1200

Mahabubuzzaman
sumber
6

Anda tidak perlu menambahkan file.py.

Simpan saja file di lokasi yang sama dengan file dari tempat Anda ingin mengimpornya. Kemudian cukup impor fungsi Anda:

from file import a, b
Mohan
sumber
Oh, tentu saja tidak. Saya tidak bermaksud mengetik .py Ini salah ketik
Mohan
4

Anda harus memiliki file di lokasi yang sama dengan file Python yang Anda coba impor. Juga 'dari fungsi impor file' sudah cukup.

Girish M
sumber
4

tambahkan titik (.) di depan nama file jika Anda ingin mengimpor file ini yang berada di direktori yang sama di mana Anda menjalankan kode Anda.

Sebagai contoh, saya menjalankan file bernama a.py dan saya ingin mengimpor metode bernama addFun yang ditulis dalam b.py, dan b.py ada di direktori yang sama

dari .b impor addFun

Shravan Kumar
sumber
2

Misalkan file yang ingin Anda panggil adalah anotherfile.py dan metode yang ingin Anda panggil adalah method1, kemudian impor file terlebih dahulu dan kemudian metode

from anotherfile import method1

jika method1 adalah bagian dari kelas, biarkan kelas menjadi class1, lalu

from anotherfile import class1

lalu buat objek class1, misalkan nama objeknya ob1, lalu

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

dalam kasus saya saya menamai file saya helper.scrap.pydan tidak bisa membuatnya bekerja sampai saya berubah menjadihelper.py

bresleveloper
sumber
1
Saya tidak berpikir Anda bisa memilikinya. atau - dalam nama file
JeffCharter