เรียกใช้ฟังก์ชันจากไฟล์อื่นใน Python


496

Set_up: ฉันมีไฟล์. py สำหรับแต่ละฟังก์ชั่นที่ฉันต้องการใช้ในโปรแกรม

ในโปรแกรมนี้ฉันต้องเรียกใช้ฟังก์ชั่นจากไฟล์ภายนอก

ฉันได้พยายาม:

from file.py import function(a,b)

แต่ฉันได้รับข้อผิดพลาด:

ImportError: ไม่มีโมดูลชื่อ 'file.py'; ไฟล์ไม่ใช่แพ็คเกจ

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


65
from file import function. ไม่ต้องการนามสกุลไฟล์หรือพารามิเตอร์ฟังก์ชั่น
samrap

4
คุณน่าจะผ่านส่วนโมดูลในบทช่วยสอน Python
Burhan Khalid

ตรวจสอบให้แน่ใจว่าใช้ PyCharms แล้วมันจะจดจำชื่อไฟล์ที่มีการคั่นด้วยเครื่องหมายขีดล่างเท่านั้น
Jerry

นอกจากนี้หากคุณต้องการที่จะนำเข้าฟังก์ชั่นจากให้แน่ใจว่ามีเป็นแพคเกจในไดเรกทอรีของคุณด้วยชื่อไม่มีfile.py file
SomeBruh

คำตอบ:


553

ไม่จำเป็นต้องเพิ่มfile.pyในขณะนำเข้า เพียงแค่เขียนแล้วเรียกใช้ฟังก์ชันการใช้from file import function function(a, b)เหตุผลที่สิ่งนี้อาจไม่ทำงานเนื่องจากfileเป็นหนึ่งในโมดูลหลักของ Python ดังนั้นฉันขอแนะนำให้คุณเปลี่ยนชื่อไฟล์ของคุณ

โปรดทราบว่าถ้าคุณกำลังพยายามที่จะฟังก์ชั่นที่นำเข้าจากa.pyไปยังไฟล์ที่เรียกว่าb.pyคุณจะต้องให้แน่ใจว่าa.pyและb.pyอยู่ในไดเรกทอรีเดียวกัน


3
"ไฟล์" เป็นเพียงตัวยึดตำแหน่งสำหรับคำถามที่ฉันถามไม่ใช่ชื่อไฟล์จริง ขอบคุณค่ะ ฉันจะลองทำสิ่งนี้และกลับไปหาคุณ
2977230

4
ฉันลองสิ่งนี้ แต่ยังคงแสดงข้อผิดพลาด: มีอะไรเกี่ยวข้องกับ Python 3 หรือเป็นปัญหาทั่วไปหรือไม่
DarkRose

4
@GamesBrainiac จะเกิดอะไรขึ้นถ้าไฟล์ที่คุณต้องการนำเข้าฟังก์ชั่นนั้นอยู่ในไดเรกทอรีอื่น? ฉันสามารถรวมไฟล์พา ธ นำหน้าชื่อไฟล์หรือมีบางสิ่งที่ซับซ้อนกว่านี้ได้หรือไม่
Tom

6
@Tom คุณต้องเพิ่มเส้นทางนั้นไปยังตัวแปร PYTHONPATH หากยังไม่ได้อยู่ในนั้น
เกม Brainiac

13
มีวิธีการนำเข้าฟังก์ชั่นจาก a.py ไปยังไฟล์ b.py หรือไม่หากไม่อยู่ในไดเรกทอรีเดียวกัน
Nirvan Sengupta

192

.pyก่อนอื่นคุณไม่จำเป็นต้องมี

หากคุณมีไฟล์a.pyและภายในคุณมีฟังก์ชั่นบางอย่าง:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

และคุณต้องการที่จะนำเข้าพวกเขาในz.pyคุณต้องเขียน

from a import b, c

47
คุณสามารถนำเข้า *
Dimitar Marinov

1
@DimitarMarinov ด้วย * ถูกแทนที่ด้วยชื่อไฟล์หรือไม่
Karlo

3
@Karlo, no, just *
Dimitar Marinov

26
การใช้ "นำเข้า *" ถือเป็นการปฏิบัติที่ไม่ดี ชัดเจนดีกว่าโดยปริยาย
Francisco Gutiérrez

หาก a.py อยู่ในโฟลเดอร์บอกว่า fol1 แล้วจะมีการนำเข้าอย่างไร @ dimitar-marinov
Aditya C

57

คุณสามารถทำได้ 2 วิธี อย่างแรกคือเพียงนำเข้าฟังก์ชั่นเฉพาะที่คุณต้องการจาก file.py ในการใช้งานนี้

from file import function

อีกวิธีคือการนำเข้าไฟล์ทั้งหมด

import file as fl

จากนั้นคุณสามารถเรียกใช้ฟังก์ชันใด ๆ ภายใน file.py โดยใช้

fl.function(a,b)

36

คุณสามารถเรียกใช้ฟังก์ชันจากไดเรกทอรีอื่นได้เช่นกันในกรณีที่คุณไม่สามารถหรือไม่ต้องการให้มีฟังก์ชั่นในไดเรกทอรีเดียวกันกับที่คุณใช้งานอยู่ คุณสามารถทำได้สองวิธี (อาจมีทางเลือกมากกว่า แต่สิ่งเหล่านี้เป็นวิธีที่ได้ผลสำหรับฉัน)

ทางเลือก 1 เปลี่ยนไดเรกทอรีการทำงานของคุณชั่วคราว

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

ทางเลือก 2 เพิ่มไดเรกทอรีที่คุณมีฟังก์ชั่นของคุณเพื่อ sys.path

import sys

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

from file import function

1
มันไม่เหมือนกับการเพิ่มเส้นทางไปยัง PYTHONPATH ใช่ไหม
Birish

33

หากไฟล์ของคุณอยู่ในโครงสร้างแพ็กเกจที่แตกต่างกันและคุณต้องการเรียกมันจากแพ็คเกจอื่นคุณสามารถเรียกมันในแบบนั้นได้:

สมมติว่าคุณมีโครงสร้างแพคเกจดังต่อไปนี้ในโครงการหลามของคุณ:

แพ็คเกจ Python และโครงสร้างไฟล์

ใน - com.my.func.DifferentFunctionไฟล์หลามคุณมีฟังก์ชั่นบางอย่างเช่น:

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

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

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

และคุณต้องการเรียกฟังก์ชั่นที่แตกต่างกันจากExample3.pyนั้นทำตามวิธีที่คุณทำได้

กำหนดคำสั่งการนำเข้าในExample3.py- ไฟล์เพื่อนำเข้าฟังก์ชั่นทั้งหมด

from com.my.func.DifferentFunction import *

หรือกำหนดชื่อฟังก์ชันแต่ละชื่อที่คุณต้องการนำเข้า

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

จากนั้นในExample3.pyคุณสามารถเรียกใช้ฟังก์ชั่นสำหรับรัน:

num1 = 20
num2 = 10

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

เอาท์พุท:

 add :  30

 sub :  10

 mul :  200

3
นำเข้า glob คือกำลังใจ
jdhao

21

มาในคุณสมบัติเดียวกัน แต่ฉันต้องทำด้านล่างเพื่อให้มันใช้งานได้

หากคุณเห็น 'ModuleNotFoundError: ไม่มีโมดูลชื่อ' คุณอาจต้องใช้จุด (.) หน้าชื่อไฟล์ดังนี้

จาก. funการนำเข้าไฟล์


13

ขั้นแรกให้บันทึกไฟล์ในรูปแบบ. py (เช่นmy_example.py) และถ้าไฟล์นั้นมีฟังก์ชั่น

def xyz():

        --------

        --------

def abc():

        --------

        --------

ในฟังก์ชั่นการโทรคุณเพียงแค่พิมพ์บรรทัดด้านล่าง

file_name: my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


2
ฉันไม่รู้ว่าการล้มเหลวของฉันเกี่ยวกับหลามเวอร์ชันหรือไม่ สิ่งที่ฉันทำเลือกตัวอย่างนี้คือimport fn(ไม่มีนามสกุล) fn.my_funcion()และใช้พวกเขาโดยตรงบนไฟล์หลัก เมื่อฉันใช้import fn.pyพยายามโหลดไฟล์ py.py ซึ่งจะไม่มีอยู่ การใช้from fn.py import funcnameไม่ได้ผลเช่นกัน ขอบคุณ.
m3nda

13

เปลี่ยนชื่อโมดูลเป็นสิ่งอื่นนอกเหนือจาก 'ไฟล์'

จากนั้นให้แน่ใจด้วยเมื่อคุณเรียกใช้ฟังก์ชันที่:

1) หากคุณกำลังนำเข้าโมดูลทั้งหมดคุณจะต้องระบุชื่อโมดูลอีกครั้งเมื่อเรียกใช้:

import module
module.function_name()

หรือ

import pizza
pizza.pizza_function()

2) หรือถ้าคุณกำลังนำเข้าฟังก์ชั่นเฉพาะฟังก์ชั่นที่มีนามแฝงหรือฟังก์ชั่นทั้งหมดโดยใช้ * คุณจะไม่ย้ำชื่อโมดูล:

from pizza import pizza_function
pizza_function()

หรือ

from pizza import pizza_function as pf
pf()

หรือ

from pizza import *
pizza_function()

9

ฟังก์ชั่นจากไฟล์. py (สามารถ (แน่นอน) อยู่ในไดเรกทอรีอื่น) สามารถนำเข้าได้ง่ายๆโดยการเขียนไดเรกทอรีก่อนจากนั้นจึงตั้งชื่อไฟล์ที่ไม่มีนามสกุล. py:

from directory_name.file_name import function_name

และต่อมาถูกนำมาใช้: function_name()


8

Inside MathMethod.Py

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

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

ภายในหลัก

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

เอาท์พุท 1200


6

file.pyคุณไม่ต้องเพิ่ม

เพียงแค่เก็บไฟล์ไว้ในที่เดียวกับไฟล์ที่คุณต้องการนำเข้า จากนั้นเพียงนำเข้าฟังก์ชั่นของคุณ:

from file import a, b

โอ้แน่ใจว่ามันไม่ ฉันไม่ได้ตั้งใจจะพิมพ์. py มันเป็นคำที่พิมพ์ผิด
Mohan

4

คุณควรมีไฟล์ในตำแหน่งเดียวกับไฟล์ Python ที่คุณพยายามนำเข้า นอกจากนี้ 'จากฟังก์ชั่นนำเข้าไฟล์' ก็เพียงพอ


4

ต่อท้ายจุด (.) ด้านหน้าชื่อไฟล์หากคุณต้องการนำเข้าไฟล์นี้ซึ่งอยู่ในไดเรกทอรีเดียวกันกับที่คุณกำลังเรียกใช้รหัสของคุณ

ตัวอย่างเช่นฉันใช้งานไฟล์ชื่อ a.py และฉันต้องการนำเข้าวิธีชื่อ addFun ซึ่งเขียนด้วย b.py และ b.py อยู่ในไดเรกทอรีเดียวกัน

จาก .b นำเข้า addFun


2

สมมติว่าไฟล์ที่คุณต้องการโทรคือ anotherfile.py และวิธีที่คุณต้องการโทรคือ method1 จากนั้นนำเข้าไฟล์ก่อนแล้วจึงเปลี่ยนวิธี

from anotherfile import method1

ถ้า method1 เป็นส่วนหนึ่งของคลาสให้ class เป็น class1 จากนั้น

from anotherfile import class1

จากนั้นสร้างวัตถุของ class1 สมมติว่าชื่อวัตถุคือ ob1 แล้ว

ob1 = class1()
ob1.method1()

2

ในกรณีของฉันฉันตั้งชื่อไฟล์ของฉันhelper.scrap.pyและไม่สามารถใช้งานได้จนกว่าฉันจะเปลี่ยนเป็นhelper.py


1
ฉันไม่คิดว่าคุณจะมี หรือ - ในชื่อไฟล์
JeffCharter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.