7 เมษายน 2558

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

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

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

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


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

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

import ชื่อไฟล์โมดูล

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

หากเราต้องการให้มีการเรียกใช้คำสั่งที่อยู่ในโมดูล เราต้องสร้างฟังก์ชันขึ้นมารองรับด้วยครับ
เมื่อเรียกใช้งาน โดยอ้างอิงจากฟังก์ชันที่อยู่ใน cal.py
test.py
from cal import plue,plueto #เรียกใช้ฟังก์ชันหรือ class จากโมดูล cal
print(plue(5))
print(plueto(5,10))

ผลลัพธ์
10
15

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

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

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

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

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

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




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


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

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

และผมสร้างไฟล์ __init__.py เป็นไฟล์สำหรับกำหนดค่าการเรียกใช้คำสั่งในโมดูล
__init__.py
from cal import * #หมายถึงเรียกใช้โมดูลจากไฟล์ cal.py ที่อยู่ในโฟลเลอร์เดียวกัน โดยดึงคำสั่งทุกคำสั่งมา

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

setup.py
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 setup.py install

เสร็จแล้วลองรันใช้งานใน Python IDE ดูครับ
>>> from cal import cal
>>> print(cal.plue(5))
10

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

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

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

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

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

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