31 ธันวาคม 2557

Published ธันวาคม 31, 2557 by with 0 comment

แปลงโค้ดจาก Python 2 ไปยัง Python 3 ด้วย 2to3

สวัสดีทุกท่านก่อนสิ้นปี 2557 ครับ ในการเขียนโปรแกรม Python จาก Python 2 มายัง Python 3 มีการเปลี่ยนแปลงที่สำคัญ คือ การเปลี่ยนแปลงหลักไวยากรณ์ ทำให้นักพัฒนาที่ต้องการ Port โค้ดมายัง Python 3 ต้องไล่แก้โค้ดหลายบรรทัด ถ้าโค้ดมีจำนวนมาก ยิ่งใช้เวลาแก้โค้ดนาน บทความนี้จะพาผู้อ่านไปแปลงโค้ดจาก Python 2 ไปยัง Python 3 ด้วย "2to3" ครับ
  หลังจากที่ทางมูลนิธิซอฟต์แวร์ไพทอน (Python Software Foundation) ได้ออก Python 3.0 มาและได้ออกวิธีการแปลงโค้ดจาก Python 2 ไปยัง Python 3 และได้ออกเครื่องช่วยที่มีชื่อว่า "2to3" ครับ มีทั้งใน Python 2.7 และใน Python 3 ทุกรุ่นครับ
  โดยเครื่องมือ 2to3 นี้สามารถแปลงโค้ดตามมาตรฐานของ Python ได้ เช่น print , OOP เป็นต้น และยังสามารถแปลงโค้ดการ import โมดูลมาตรฐาน เช่น tkinter ได้อีกด้วย
ในการเรีกใช้งานมีหลักการดังนี้ครับ
เปิดคอมมานด์ไลน์ขึ้นมา เรียกใช้งานด้วยคำสั่ง
2to3.py ไฟล์โค้ดที่ต้องการแปลง.py
ใน Windows จะใช้คำสั่ง
python.exe C:\Python**\Tools\scripts\2to3.py ไฟล์โค้ดที่ต้องการแปลง.py
ตรง ** คือ เลขรุ่นของ Python เช่น ผมใช้ Python 3.4 เป็นเลข 34 ครับ
หากต้องการแปลงโค้ดจาก Python 2 ไปยัง Python 3 โดยเก็บไฟล์ Backup Python 2 ไว้ ใช้คำสั่ง
2to3.py ไฟล์โค้ดที่ต้องการแปลง.py -W
หากไม่ต้องการเก็บไฟล์ Backup Python 2 ไว้ ใช้คำสั่ง
2to3.py ไฟล์โค้ดที่ต้องการแปลง.py -n -W

ตัวอย่างการแปลงโค้ดจาก Python 2 ไปยัง Python 3 ด้วย 2to3

โค้ดไฟล์ py2.py
def greet(name):
    print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)
ผมใช้คำสั่ง
2to3 py2.py -W
ผมจะได้ไฟล์
ไฟล์ py2.py ตอนนี้จะเป็นไฟล์โค้ดที่ถูกแปลงเป็น Python 3 แล้วครับ
def greet(name):
    print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)
ส่วนไฟล์ py2.py.bak จะเป็นไฟล์ Backup Python 2 ครับ
def greet(name):
    print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)

สวัสดีปีใหม่ 2558 ขอให้ผู้อ่านทุกท่านมีสุขภาพร่างกายแข็งแรง มีแต่ความเจริญเข้ามาในชีวิต ขอให้ร่ำรวยมีความสุขตลอดทั้งปี 2558 ครับ

ขอบคุณครับ

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

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

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