เริ่มต้น Python ด้วย PySide2 + Miniconda + PyCharm

ขอนำเสนอวิธีการติดตั้งในเบื้องต้นเพื่อใช้ PySide2 สำหรับผู้ที่เริ่มต้นศึกษาเขียนไพทอน บางครั้งไม่รู้จะเริ่มต้นตรงไหน ผมจะขอแนะนำสามสหายที่จะมาช่วยทำให้ชีวิตง่ายขึ้น

  • PySide2 อยู่ระหว่างการพัฒนาจากเจ้าของ Qt framework เองจึงไม่ต้องห่วงว่าโครงการจะล้มลาเลิกร้างกันก่อน ฟรีและมีสัญญาอนุญาตแบบ LPGL v2 สามารถพัฒนาโปรแกรมเพื่อการค้าได้ รุ่นเสถียรอีกไม่นานนักน่าจะออกมาแล้ว
  • Miniconda3 เป็นส่วนหนึ่งของ Anaconda ซึ่งเป็นเฟรมเวิร์คสำหรับการทำ data science สำหรับภาษาไพทอน ส่วน Miniconda เป็นตัวจัดสภาพแวดล้อมให้ไพทอน เช่นถ้าต้องการพัฒนาโปรแกรมให้สามารถรันได้ทั้ง 32 บิตและ 64  บิต ก็ต้องตัวนี้เลย สามารถเลือกรุ่นของ Python ได้ด้วย อย่างเช่น PySide2 ต้องการไพทอน 3.5 สามารถกำหนดรุ่นของไพทอนได้ทีหลังด้วยการ config ที่ง่ายไม่กี่ขั้นตอน ฟรีแบบมีสัญญาอนุญาตแบบ BSD 3-clause
  • PyCharm สภาพแวดล้อมในการพัฒนาทั้ง editor, debugger ครบครัน ใช้งานสะดวก ง่าย ฟรีสำหรับรุ่น community ครั้งหนึ่งผมเคยชมว่า Eric ดีแต่ตัวนี้ดีกว่ามาก รุ่น community ฟรีมีสัญญาอนุญาตแบบ Apache license

ต่อไปจะลำดับความเรียงว่าต้องติดตั้งตัวไหนก่อนตัวไหนหลัง

ดาวน์โหลดและติดตั้ง Miniconda

ขณะที่เขียนอยู่นี้เวอร์ชั่น 3 ต้องการดาวน์โหลดก็ตามลิ๊งนี้ download miniconda ส่วนตัวผมเลือกรุ่น 64 บิตขนาดประมาณ 60 MB ติดตั้งก็ง่ายๆ เมื่อได้ไฟล์มาแล้วตอนติดตั้ง ช่วงที่ถามว่าจะเอาโปรแกรมไปเก็บไว้ที่ไหนผมขอแนะนำให้ไว้ตรงรากของไดรว์ C จะหาง่ายและสะดวกที่สุดตอนคลิกเข้าไปดูไฟล์

Miniconda3-latest-Windows-x86_64 (1)_2017-04-23_16-57-39

เมื่อติดตั้งเสร็จ เวลาใช้โปรแกรมนี้ใน windows 10 ใช้ปุ่มวินโดส์ (Win) บนคีย์บอร์ดแล้วพิมพ์คำว่า “anaconda” บางทีพิมพ์แค่คำว่า “ana” ก็จะเห็น shortcut “Anaconda Prompt” ขึ้นมาก็ enter เข้าได้เลย จะแสดงพาทที่ติดตั้งไว้ด้วยเครื่องผมคือ “C:\Miniconda3” ลองเรียก python ดูจะเห็นว่าเป็นรุ่น 3.6.0

cmd_2017-04-24_04-54-34

สมมติว่าผมต้องการติดตั้ง python รุ่น 3.5 เพราะว่า Pyside2 ต้องการรุ่นนี้ และผมต้องการพัฒนาโปรแกรมด้วย PySide2 ทั้ง 32 bit และ 64 bit ที่คอมมานด์ พร็อมป์จัดการพิมพ์ตามนี้

set CONDA_FORCE_32BIT=1
conda create -n py35_32 python=3.5

คำสั่งแรกบังคับให้ miniconda อยู่ในโหมด 32 บิต คำสั่งถัดไปสร้างสภาพแวดล้อมชื่อ py35_32 แล้ว Miniconda จะดาวน์โหลดไลบรารีที่เกี่ยวข้องมาติดตั้งให้ทันที โดยในที่นี้ก็คือ Python รุ่น 3.5  เวลาต้องการใช้งานสภาพแวดล้อมนี้ใช้คำสั่งนี้

activate py35_32

จะได้ผลลัพธิ์ดังนี้ จะเห็นตัวหนังสือด้านหน้าจะเปลี่ยนเป็น “py35_32”

cmd_2017-04-23_18-47-30

ต่อไปสร้างสภาวะแวดล้อมเป็นไพทอน 64 บิต คำสั่งแรกปลดล็อคการใช้โหมด 32 บิต และคำสั่งที่สองสร้างสภาวะแวดล้อมชื่อ “py35_64” ระบุไปว่าเราต้องการไพทอนรุ่น 3.5

set CONDA_FORCE_32BIT=
conda create -n py35_64 python=3.5

เวลาใข้งานต้องการจะใช้ในโหมดนี้ ใช้คำสั่ง

activate py35_64

ถ้าดูโฟลเดอร์ของ miniconda จะเห็นว่ามีการสร้างโฟลเดอร์ให้สองโฟลเดอร์ ตามที่เราสร้างด้วยคำสั่ง create

explorer_2017-04-24_04-58-04

ติดตั้งไลบรารีบนสภาพแวดล้อม 32 บิต

ต่อไปจะติดตั้งไลบรารีต่างๆ ซึ่งก็แล้วแต่ละคนที่จำเป็นต้องใช้ ตัวอย่างที่ผมต้องการใช้งานได้แก่ openpyxl, pyproj, geographiclib, pyshp, gmplot, simplekml และที่สำคัญที่สุดคือ pyside2 เนื่องจากไลบรารี openpyxl บางครั้งผมติดตั้งจากคำสั่ง pip และไลบรารีตัวนี้ต้องการ lxml บางครั้งติดตั้งแล้วใช้งานไม่ได้ ต้องไปดาวน์โหลดไฟล์ wheel มาติดตั้งเอง หมายเหตุว่าไฟล์ wheel คุณสมบัติพิเศษของมันคือสามารถแนบไฟล์ที่ต้องการใช้มาได้ด้วยเช่นไฟล์ dll

ต่อไปจะติดตั้งไลบรารีในโหมด 32 บิตก่อน อย่าลืมใช้คำสั่ง

activate py35_32

ติดตั้ง lxml ด้วยการไปดาวน์โหลดไฟล์ wheel ที่เว็บนี้มีเกือบทุกอย่างที่ต้องการ download python extension packages ไปถึงแล้วก็ค้นหาในเว็บหา lxml เจอแล้วก็ดาวน์โหลดมาทั้ง 32 บิตและ 64 บิต และไฟล์ต้องมีคำว่า cp35 ด้วยเป็นการระบุว่าใช้กับ python 3.5

firefox_2017-04-24_14-12-55

pip install lxml‑3.7.3‑cp35‑cp35m‑win32.whl

ต่อไปติดตั้งไลบรารีของไพทอนตัวที่เหลือ

pip install openpyxl

pip install geographiclib

pip install pyshp

pip install pyproj

pip install gmplot

pip install simplekml

ติดตั้ง PySide2 ด้วย wheel

เนื่องจาก PySide2 เวอร์ชั่นจริงยังไม่ได้ออกมา ดังนั้นต้องอาศัยไฟล์ wheel หรืออีกทางหนึ่งก็คือไปดึงไฟล์โค๊ดจาก github มาคอมไพล์เอง แต่ผมทำไม่สำเร็จ เลยต้องอาศัยวิธีนี้ ดาวน์โหลดไฟล์ wheel ได้จากลิ๊งค์นี้ download pyside2

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

firefox_2017-04-24_07-35-19

ใช้ command prompt ของ miniconda ทำการ cd เข้าไปหาไฟล์ที่เก็บไว้แล้วติดตั้งด้วย pip

pip install  PySide2-2.0.0.dev0-cp35-cp35m-win32.whl

สำหรับเครื่องคอมพิวเตอร์ผม ตอนติดตั้ง PySide2 ดูจากรูปด้านล่าง

cmd_2017-04-24_07-41-40

ติดตั้งไลบรารีบนสภาพแวดล้อม 64 บิต

เหมือนกับติดตั้งให้ 32 บิต เพียงแต่ตอนติดตั้ง PySide2 ใช้ไฟล์ wheel คนละตัว เริ่มด้วยคำสั่งนี้ก่อน

activate py35_64

จากนั้นก็ใส่ยาวเลย

pip install lxml‑3.7.3‑cp35‑cp35m‑win_amd64.whl

pip install openpyxl

pip install geographiclib

pip install pyshp

conda install pyproj

pip install gmplot

pip install simplekml

pip install PySide2-2.0.0.dev0-cp35-cp35m-win_amd64.whl

ลองทดสอบเรียกไพทอน แล้ว import ไลบรารีเหล่านี้ดูกัน

cmd_2017-04-24_07-52-59

ผ่านฉลุยครับไม่มี error เลย

ติดตั้ง PyCharm

ต่อไปจะดาวน์โหลด PyCharm รุ่น Community ได้ตามลิ๊งค์นี้ download pycharm เลือกเอารุ่น community ซึ่งจะฟรี ได้ไฟล์มาแล้วก็ทำการติดตั้งจากไฟล์ installer ที่ดาวน์โหลดมา เมื่อติดตั้งเสร็จแล้ว ที่สำคัญคือจะ config ให้ pycharm รู้จัก python ว่าต้องใช้สภาพแวดล้อมไหนอย่างไร รัน Pycharm ครั้งแรกถ้ายังไม่มีไฟล์ project เลยเรียกเมนู File > New Project… แล้วใส่ชื่อโครงการ และที่สำคัญคือสามารถเลือกสภาวะแวดล้อมได้ ผมเลือก “py35_64”

pycharm64_2017-04-24_08-05-09

เมื่อเข้าไปแล้วโครงการยังว่าง ผมสร้างไฟล์ใหม่ ด้วยคำสั่ง File > New… เลือกเป็น python file จะเห็นหน้าตาโล่งๆ ว่างปล่าว

pycharm64_2017-04-24_08-11-26

แต่ถ้าต้องการเปลี่ยนเป็นสภาวะแวดล้อม “py35_32” ในโหมด 32 บิต จะต้องไปที่เมนู File > Settings… จะเห็นไดอะล็อกที่สามารถเปลี่ยนได้ที่ Project Intepreter

pycharm64_2017-04-24_08-12-59

โปรแกรมตัวอย่างทดสอบ PySide2

มาลอง PySide2 กันครับ ตรงหน้าว่างๆของ test.py ลองพิมพ์ตัวอย่างนี้เข้าไป หรือ copy & paste ไปก็ได้ แต่มือใหม่ควรจะหัดพิมพ์ สำหรับโปรแกรมมิ่งจะไม่อธิบายนะครับ แต่ผมแนะนำว่าให้หาอ่านจาก PyQt5 ดีกว่าเพราะ tutorial เยอะมาก

class=”code”># -*- coding: utf-8 -*-

import sys
from PySide2.QtWidgets import QApplication, QWidget

if __name__ == ‘__main__’:

app = QApplication(sys.argv)

w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle(‘Simple’)
w.show()

sys.exit(app.exec_())

จะทำการรันดู ที่เมนู Run > Run… เลือกไฟล์ test.py  จะได้ผลลัพธ์คือ error ไม่มีอะไรครับ PyCharm  หาไลบรารีของ PySide2 ไม่เจอ

pycharm64_2017-04-24_08-23-45

มีวิธีหลายวิธีตั้งแต่ environment variables  ให้วินโดส์ วิธีแรกที่จะแนะนำนั้นง่ายเพิ่มโค๊ดประมาณ 5 บรรทัด

# -*- coding: utf-8 -*-
import sys
import os
import PySide2

dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', '')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

from PySide2.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Hello world')
    w.show()

    sys.exit(app.exec_())

โดยเฉพาะบรรทัดที่ dirname = os.path.dirname(PySide2.__file__) จะเป็นการดึงเอาที่อยู่ของไดเรคทอรีหรือโฟลเดอร์ของ PySide2 ที่่เราใช้งานอยู่ ไม่ว่าเรากำลังใช้ 32 บิตหรือ 64 บิต ก็ไม่มีปัญหา ลองรันดูที่นี้ผ่านครับ

pycharm64_2017-04-24_14-39-17

วิธีที่สองใช้วิธีเขียน Environment Variables ที่คีย์บอร์ดกดคีย์ win  ค้างไว้กด x (Win + x) จะมีเมนูของวินโดส์เลือก System แล้วเลือก Advance system settings จากนั้นจะมีไดอะล็อกอีกตัวขึ้นมา คลิกเลือก Environment Variables

SystemPropertiesAdvanced_2017-04-24_17-19-09

คลิก New… ที่ System Variables ถ้าเครื่องผมป้อนดังรูปด้านล่าง สำหรับสภาพแวดล้อม 64 บิต ถ้า 32 บิต แก้ตัวหนังสือ py35_64 เป็น py35_32

SystemPropertiesAdvanced_2017-04-24_17-21-36

วิธีนี้อานุภาพรุนแรงครับ เพราะว่าโปรแกรมบางโปรแกรมที่เขียนด้วย PyQt5 หรือ Qt5 ที่ติดตั้งไว้บนเครื่องคอมพิวเตอร์จะพร้อมใจกัน error เพราะหาไลบรารีของ  Qt5 ไม่เจอ เพราะ system variable ตัวนี้ QT_QPA_PLATFORM_PLUGIN_PATH สิทธิ์จะมากที่สุด ปกติโปรแกรมที่พัฒนาด้วย Qt จะเขียนไฟล์ qt.conf ไว้เพื่อระบุว่าไฟล์ไลบรารีของ Qt อยู่ที่ไหน โดยที่ไฟล์ qt.conf ก็วางที่เดียวกับ execute file แต่ถ้าเจอ system variable ตัวนี้จะไม่อ่านไฟล์ qt.conf ก่อน แต่จะวิ่งมาที่พาธที่เราตั้งนี้

เวลาจะเขียนโปรแกรมด้วย PyCharm ผมจะมาตั้งก่อน เสียเวลานิดหน่อย เวลาไม่ได้เขียนก็ลบออก โปรแกรมอื่นๆจะทำงานได้ตามปกติ แต่ตอนที่ผมยังใช้ PyQt5 ไม่มีปัญหาครับ ไม่ต้องมานั่งใส่ใหม่และลบออก ชีวิตยุ่งขึ้นมานิด แต่แลกเอาสัญญาอนุญาตของ PySide2 ที่เปิดกว้างกว่าครับ พบกันตอนหน้าครับ

Leave a Reply

Your email address will not be published. Required fields are marked *