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?


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.


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

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)

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

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

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


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

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


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

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


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


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

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.


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


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

2

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


1
Saya tidak berpikir Anda bisa memilikinya. atau - dalam nama file
JeffCharter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.