7 เมษายน 2558

Published เมษายน 07, 2558 by with 0 comment

สร้างโมดูลของตัวเองในภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปสร้างโมดูลของตัวเองในภาษา Python กันครับ

หลักการเรียกใช้โมดูลในโฟลเลอร์เดียวกัน


ในการ import เรียกใช้โมดูลในโฟลเลอร์เดียวกัน สามารถทำได้โดยตามตัวอย่างนี้ครับ
hello.py

[python]
print("Hello")
[/python]

เราสร้างตัวโมดูลสำหรับเรียกใช้กันในโฟลเลอร์เดียวกันแล้ว สามารถเรียกใช้ได้เลยโดยใช้การ

[python]import ชื่อไฟล์โมดูล[/python]

โดยชื่อไฟล์โมดูลไม่ต้องมี .py ครับ ตัวอย่างเช่น
show.py

[python]
import hello
[/python]

ผลลัพธ์
Hello

หากเราต้องการให้มีการเรียกใช้คำสั่งที่อยู่ในโมดูล เราต้องสร้างฟังก์ชันขึ้นมารองรับด้วยครับ
cal.py

[python]
def plue(arg):
return arg+arg
def plueto(a,b):
return a+b
[/python]

เมื่อเรียกใช้งาน โดยอ้างอิงจากฟังก์ชันที่อยู่ใน cal.py
test.py

[python]
from cal import plue,plueto #เรียกใช้ฟังก์ชันหรือ class จากโมดูล cal
print(plue(5))
print(plueto(5,10))
[/python]

ผลลัพธ์
10
15

หากเราต้องการทราบคำสั่งที่อยู่ในโมดูล cal ที่เราเขียนขึ้นมา สามารถใช้คำสั่ง __dict__.keys() ได้ดังนี้ครับ
list.py

[python]
import cal
print(cal.__dict__.keys())
[/python]

ผลลัพธ์
dict_keys(['__builtins__', 'plueto', '__name__', '__doc__', 'plue', '__spec__', '__file__', '__loader__', '__cached__', '__package__'])

ในกรณีที่มีคำสั่งในโมดูลที่เราเขียน หากเราต้องการสร้าง main ขึ้นมา (เหมือนภาษา C) โดยจะเรียกใช้งานได้เฉพาะโค้ดนี้เท่านั้นครับ เราสามารถใช้ __name__ == '__main__' ได้ตามนี้ครับ
caltwo.py

[python]
if __name__ == '__main__':
print("5")
[/python]

เมื่อเรา import โมดูลเข้ามา
show2.py

[python]
import caltwo
[/python]

ผลลัพธ์
จะพบว่า ไม่มีอะไรขึ้นมาเพราะ show2.py ไม่ใช่โปรแกรมหลักครับ

อ่านรายละเอียดเพิ่มเติมเรื่อง ฟังก์ชันใน Python  สร้างฟังก์ชันไม่ระบุชื่อด้วย lambda ใน Python และ อ๊อบเจ็กและคลาสพื้นฐานในภาษา Python




ทำไฟล์ติดตั้งโมดูลใน Python


หลังจากที่ผมได้พาผู้อ่านไปเรียกใช้โมดูลในโฟลเลอร์เดียวกันมาแล้ว ต่อไปเราจะทำให้สามารถเรียกใช้งานโมดูลได้โดยที่ไม่ต้องเป็นต้องอยู่โฟลเลอร์เดียวกันกับไฟล์โมดูล เหมือนเราเรียกใช้โมดูล lxml , pyside ครับ โดยมีตัวอย่างต่อไปนี้

[python]
from distutils.core import setup #ระบบติดตั้งโมดูล

setup(name='Distutils', #ชื่อโมดูล
version='1.0', #เวชั่นของโมดูล
description='Python Distribution Utilities', #รายละเอียดโมดูล
author='Greg Ward', #ชื่อผู้สร้างโมดูล
author_email='[email protected]', #อีเมลล์ติดต่อผู้สร้างโมดูล
url='https://www.python.org/sigs/distutils-sig/', #หน้าเว็บโมดูล
packages=['distutils'], #packages ที่ถูกรวมด้วย โดย packages คือโฟลเลอร์ที่ใช้เก็บไฟล์โมดูลของเราครับ
)
[/python]

โดยรายละเอียดใน setup() ไม่จำเป็นต้องกำหนดทุกอันก็ได้ครับ
ต่อไปผมจะพอทุกท่านลงมือทำโมดูลกันครับ โดยผมนำไฟล์ cal.py มาทำเป็นโมดูล โดยมีโค้ดดังต่อไปนี้ครับ
cal.py

[python]
def plue(arg):
return arg+arg
def plueto(a,b):
return a+b
[/python]

สร้างโฟลเลอร์ใหม่ แล้วเก็บไฟล์ cal.py ไว้ในโฟลเลอร์ packages ที่ผมสร้างขึ้นมาเพิ่มชื่อว่า cal
รายละเอียดระบบไฟล์ของโมดูล

และผมสร้างไฟล์ __init__.py เป็นไฟล์สำหรับกำหนดค่าการเรียกใช้คำสั่งในโมดูล
__init__.py

[python]
from cal import * #หมายถึงเรียกใช้โมดูลจากไฟล์ cal.py ที่อยู่ในโฟลเลอร์เดียวกัน โดยดึงคำสั่งทุกคำสั่งมา
[/python]

เสร็จแล้วทำไฟล์ setup.py ซึ่งเป็นไฟล์ระบบล์ติดตั้งโมดูล โดยไว้ในโฟลเลอร์หลัก
โดยโค้ดไฟล์ setup.py มีดังนี้ครับ

setup.py

[python]
from distutils.core import setup

setup(
name='cal',
version='0.0.1',
author='Wannaphong',
packages=['cal'],
url='https://python3.wannaphong.com',
license='MIT', #license
description='Test',
include_package_data=True,
)
[/python]

แล้วเปิดคอมมาไลน์ทำการติดตั้งโมดูลที่ผมทำขึ้นมาเอง
python setup.py install

เสร็จแล้วลองรันใช้งานใน Python IDE ดูครับ

[python]
>>> from cal import cal
>>> print(cal.plue(5))
10
[/python]

อ่านรายละเอียดของการทำไฟล์ติดตั้งโมดูลใน Python ได้ที่ https://docs.python.org/3/distutils/setupscript.html

หากผู้อ่านต้องการเผยแพร่โมดูลที่ทำให้ทุกคนบนโลกสามารถติดตั้งโมดูลของท่านได้จาก PyPI สามารถเข้าไปอ่านรายละเอียดเพิ่มเติมได้ที่ https://packaging.python.org/en/latest/index.html

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ :D

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)