มีหลายวิธีในการนำเข้าไฟล์ไพ ธ อนด้วยข้อดีข้อเสีย
อย่ารีบเลือกกลยุทธ์การนำเข้าครั้งแรกที่เหมาะกับคุณไม่งั้นคุณจะต้องเขียน codebase อีกครั้งในภายหลังเมื่อคุณพบว่ามันไม่ตรงกับความต้องการของคุณ
ฉันจะเริ่มอธิบายตัวอย่างที่ง่ายที่สุด # 1 จากนั้นฉันจะย้ายไปยังตัวอย่างที่เป็นมืออาชีพและแข็งแกร่งที่สุด # 7
ตัวอย่างที่ 1 นำเข้าโมดูลหลามด้วยตัวแปลหลาม:
วางไว้ใน /home/el/foo/fox.py:
def what_does_the_fox_say():
print("vixens cry")
เข้าสู่ล่ามหลาม:
el@apollo:/home/el/foo$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
>>> import fox
>>> fox.what_does_the_fox_say()
vixens cry
>>>
คุณนำเข้าสุนัขจิ้งจอกผ่านล่ามไพ ธ อนเรียกใช้ฟังก์ชันไพ ธ อนwhat_does_the_fox_say()
จากภายใน fox.py
ตัวอย่างที่ 2 ใช้execfile
หรือ ( exec
ใน Python 3 ) ในสคริปต์เพื่อเรียกใช้งานไฟล์ python อื่น ๆ แทน:
วางไว้ใน /home/el/foo2/mylib.py:
def moobar():
print("hi")
วางไว้ใน /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py")
moobar()
เรียกใช้ไฟล์:
el@apollo:/home/el/foo$ python main.py
hi
ฟังก์ชั่น moobar ถูกนำเข้าจาก mylib.py และให้บริการใน main.py
ตัวอย่างที่ 3 ฟังก์ชั่นใช้จาก ... นำเข้า ...
วางไว้ใน /home/el/foo3/chekov.py:
def question():
print "where are the nuclear wessels?"
วางไว้ใน /home/el/foo3/main.py:
from chekov import question
question()
เรียกใช้ดังนี้:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
หากคุณกำหนดฟังก์ชั่นอื่น ๆ ใน chekov.py จะไม่สามารถใช้งานได้ยกเว้นคุณ import *
ตัวอย่างที่ 4 นำเข้า riaa.py หากอยู่ในตำแหน่งไฟล์อื่นที่นำเข้ามา
วางไว้ใน /home/el/foo4/stuff/riaa.py:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
วางไว้ใน /home/el/foo4/main.py:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
เรียกใช้:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
ที่นำเข้าทุกสิ่งในไฟล์ต่างประเทศจากไดเรกทอรีอื่น
ตัวอย่างที่ 5 ใช้ os.system("python yourfile.py")
import os
os.system("python yourfile.py")
ตัวอย่างที่ 6 นำเข้าไฟล์ของคุณผ่าน piggybacking python startuphook:
อัปเดต:ตัวอย่างนี้ใช้เพื่อทำงานกับทั้ง python2 และ 3 แต่ตอนนี้ใช้ได้กับ python2 เท่านั้น python3 กำจัดชุดคุณลักษณะการเริ่มต้นใช้งานผู้ใช้นี้เนื่องจากมันถูกทารุณกรรมโดยผู้เขียนไลบรารีหลามที่มีทักษะต่ำโดยใช้มันเพื่อใส่รหัสของพวกเขาลงในเนมสเปซส่วนกลางก่อนที่โปรแกรมทั้งหมดจะถูกกำหนดโดยผู้ใช้ หากคุณต้องการให้ python3 ทำงานได้คุณจะต้องมีความคิดสร้างสรรค์มากขึ้น ถ้าฉันบอกคุณถึงวิธีการทำผู้พัฒนาหลามจะปิดการใช้งานคุณลักษณะที่กำหนดไว้เช่นกันดังนั้นคุณจะต้องรับผิดชอบเอง
ดู: https://docs.python.org/2/library/user.html
ใส่รหัสนี้ในไดเรกทอรีบ้านของคุณ ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can't go up and "
skycake = classmethod( skycake )
ใส่รหัสนี้ใน main.py ของคุณ (สามารถอยู่ได้ทุกที่):
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
เรียกใช้คุณควรได้รับสิ่งนี้:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and have the sky pie!
SKYCAKE!
หากคุณได้รับข้อผิดพลาดที่นี่: ModuleNotFoundError: No module named 'user'
หมายความว่าคุณใช้ python3 การเริ่มต้นใช้งานจะถูกปิดใช้งานที่นั่น
เครดิตสำหรับเรื่องตลกนี้ไปที่: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py ส่งตามเรือของคุณ
ตัวอย่างที่ 7, ทนทานที่สุด: นำเข้าไฟล์ในหลามด้วยคำสั่งนำเข้าเปล่า:
- สร้างไดเรกทอรีใหม่
/home/el/foo5/
- สร้างไดเรกทอรีใหม่
/home/el/foo5/herp
ทำไฟล์ว่างชื่อ__init__.py
ภายใต้ herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
สร้างไดเรกทอรีใหม่ / home / el / foo5 / herp / derp
ภายใต้ derp ให้สร้าง__init__.py
ไฟล์อื่น:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
ภายใต้ / home / el / foo5 / herp / derp สร้างไฟล์ใหม่ที่เรียกว่าyolo.py
ใส่ไว้ในนั้น:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
ช่วงเวลาแห่งความจริงสร้างไฟล์ใหม่/home/el/foo5/main.py
ใส่สิ่งนี้ไว้ในนั้น
from herp.derp.yolo import skycake
skycake()
เรียกใช้:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
__init__.py
ไฟล์ที่ว่างเปล่าสื่อสารกับล่ามไพ ธ อนที่นักพัฒนาตั้งใจที่จะใช้ไดเรกทอรีนี้เป็นแพ็คเกจที่นำเข้าได้
หากคุณต้องการดูโพสต์ของฉันเกี่ยวกับวิธีรวมไฟล์. py ทั้งหมดในไดเรกทอรีให้ดูที่นี่: https://stackoverflow.com/a/20753073/445131