ในการลงแพ็กเกจใหม่ในไพธอนนั้นคนนิยมใช้ pip กันมากที่สุด ดังที่ได้เขียนไว้ใน
https://phyblas.hinaboshi.com/20190114 แต่ยังมีอีกตัวนึงที่ได้รับความนิยมมาก คือ
conda conda เป็นแพ็กเกจที่ติดมากับ anaconda สามารถใช้ในการติดตั้งแพ็กเกจเช่นเดียวกับ pip แต่ conda มีความสามารถในการจัดการสภาพแวดล้อมแบ่งแยก คล้ายกับ virtualenv ทำให้เหมือนรวม pip กับ virtualenv เข้าด้วยกัน
ในเรื่องการติดตั้งแพ็กเกจ conda ถือว่าทำได้ค่อนข้างดีกว่า pip แต่ข้อเสียของ conda คือมีแพ็กเกจน้อยกว่า pip ถ้าเป็นพวกแพ็กเกจที่เฉพาะทางมากอาจไม่สามารถหาใน conda ได้ ดังนั้นจึงยังจำเป็นต้องใช้ pip ควบคู่ไปด้วยอยู่
โดยทั่วไปแล้วอาจจะดูว่าถ้าแพ็กเกจไหนมีใน conda ก็ใช้ conda ลง ถ้าไม่มีค่อยใช้ pip ลงแทน
บทความนี้จะแนะนำการใช้ conda ทั้งเพื่อติดตั้งแพ็กเกจและเพื่อสร้างสภาพแวดล้อมแยก
แต่ส่วนของการลงแพ็กเกจจะไม่ได้เขียนละเอียดเท่ากับที่อธิบาย pip ไว้
เพราะเนื้อหาในส่วนนี้จะคล้ายๆกันกับ pip และ conda ไม่อาจแทน pip ได้ทั้งหมดอยู่แล้ว จึงยังคงต้องรู้ pip ก่อนค่อยรู้ conda ดังนั้นในนี้จึงไม่เขียนรายละเอียดซ้ำมาก
การติดตั้ง ปกติหากลง anaconda ก็จะมี conda ติดมาด้วยอยู่แล้ว จึงสามารถใช้ได้ทันที
เรื่องการลง anaconda ได้แนะนำไว้ใน เนื้อหา
ไพธอนเบื้องต้นบทที่ ๒ แต่หากต้องการติดตั้ง conda ต่างหากโดยไม่เกี่ยวกับ anaconda ก็อาจเลือกติดตั้ง miniconda แทน
https://conda.io/miniconda.html anaconda เป็นโปรแกรมสำเร็จรูปที่ดีมากสำหรับคนเขียนไพธอน แต่กินพื้นที่เยอะเพราะลงอะไรหลายอย่างซึ่งอาจไม่ค่อยจำเป็น
การลง miniconda จะคล้ายกับ anaconda แต่ลงเสร็จแล้วจะมีแค่ conda กับแพ็กเกจที่จำเป็นไม่กี่ตัว และไม่มีพวกอุปกรณ์เสริมอย่าง spyder หรือ ipython ด้วย
ลงแพ็กเกจใหม่ โดยพื้นฐานแล้วการใช้งาน conda จะทำนองเดียวกับ pip เวลาลงแพ็กเกจใหม่ให้ใช้คำสั่ง conda install ตามด้วยชื่อแพ็กเกจ
conda install chainer
จากนั้นจะมีแสดงชื่อแพ็กเกจนี้และแพ็กเกจที่จำเป็นต้องลงควบคู่ไปด้วย แล้วให้กดยืนยันอีกทีแพ็กเกจทั้งหมดก็จะถูกลงในเครื่องเรียบร้อย
ถ้าไม่ต้องการให้มีข้อความถามยืนยันก็ให้ใส่ -y ไป ก็จะถูกลงทันที
conda install -y chainer
ถ้าแพ็กเกจมีอยู่แล้วจะขึ้นเตือนว่ามีอยู่แล้วและจะไม่มีอะไรเกิดขึ้น แต่ถ้าต้องการบังคับให้ทำการลงใหม่ไม่ว่ายังไงก็ตามให้ใส่ -f หรือ --force
conda install -f chainer
หากต้องการลงแพ็กเกจหลายๆตัวตามรายชื่อที่อยู่ในไฟล์ให้ใส่ --file ตามด้วยชื่อไฟล์ (เหมือน -r ของ pip)
conda install --file r.txt
ถ้าต้องการเวอร์ชันเก่าก็ให้ใส่ ==เวอร์ชัน
conda install chainer==4.5.0
ถ้าต้องการให้มีข้อความเตือนน้อยๆและไม่ต้องแสดงหลอดระหว่างโหลดให้ใส่ -q หรือ --quiet
conda install -q chainer
ในทางกลับกันถ้าต้องการให้ข้อความขึ้นเยอะกว่าปกติก็ใส่ -v หรือ --verbose
conda install -v chainer
อัปเวอร์ชันแพ็กเกจ การอัปเวอร์ชันแพ็กเกจให้ใช้คำสั่ง conda update หรือ conda upgrade ก็ได้
conda update chainer
conda upgrade chainer
หากต้องการอัปแพ็กเกจทุกตัวที่ลงไว้ให้หมดก็ให้พิมพ์ --all
conda update --all
เพียงแต่ว่าอาจจะไม่ได้อัปถึงเวอร์ชันล่าสุดเพราะ conda จะพิจารณาความสัมพันธ์ระหว่างแพ็กเกจแต่ละตัวไปด้วย บางทีการอัปแพ็กเกจนึงอาจจำเป็นต้องลดเวอร์ชันของตัวอื่น ทำให้ไม่สามารถอัปทุกตัวถึงสุดพร้อมกัน
เอาแพ็กเกจออกเมื่อต้องการเอาแพ็กเกจที่ติดตั้งไว้ออกให้พิมพ์ conda remove หรือ conda uninstall
conda remove chainer
conda uninstall chainer
ค้นหาแพ็กเกจ สามารถค้นหาแพ็กเกจที่ต้องการได้โดยใช้ conda search เช่น
conda search chainer
แล้วแพ็กเกจที่พิมพ์ชื่อไปก็จะไล่เรียงออกมาทุกเวอร์ชัน
หากต้องการจำกัดเวอร์ชันที่ค้นหาเจอก็ใส่ > = < ลงไปได้ แต่ต้องคร่อมด้วยเครื่องหมายคำพูดด้วย
conda search 'chainer>=5'
จะค้นหาโดยเขียนแบบกล็อบก็ได้ (กล็อบคืออะไรอ่านได้ใน
https://phyblas.hinaboshi.com/20190109)
conda search cha*
แบบนี้จะขึ้นแพ็กเกจที่ขึ้นต้นด้วย cha มาทั้งหมด
แสดงรายชื่อแพ็กเกจที่ลงไว้ หากต้องการดูว่ามีการลงแพ็กเกจอะไรไว้ให้สั่ง
conda list
หากต้องการให้แสดงในรูปแบบที่เอาไว้ใช้เขียนใส่ไฟล์เพื่อเก็บไว้ใช้ตอนลงใหม่ได้ง่ายก็เติม --export
conda list --export > r.txt
หากต้องการค้นหาแค่แพ็กเกจที่มีชื่อตามที่ต้องการให้ใส่ -f แล้วตามด้วยข้อความค้นซึ่งเขียนด้วยเรกูลาร์เอ็กซ์เพรชชัน (รายละเอียด
https://phyblas.hinaboshi.com/20160922)
เช่น หาชื่อแพ็กเกจที่ขึ้นต้นด้วย n ทั้งหมด
conda list n.+
ล้างไฟล์ติดตั้งที่โหลดเก็บไว้ เวลาที่ใช้ conda เพื่อลงอะไรต่างๆไฟล์ที่ใช้ติดตั้งจะถูกโหลดมาแล้วบันทึกไว้ เพื่อเวลาจะใช้อีกจะได้ไม่ต้องโหลดใหม่ แต่บางทีก็ทำให้เปลืองพื้นที่ในเครื่อง ดังนั้นถ้าไม่จำเป็นและต้องการพื้นที่ก็อาจลบทิ้งได้
โดยใช้คำสั่ง conda clean แล้วตามด้วยสิ่งที่ต้องการลบ ซึ่งแบ่งเป็นหลายอย่าง เช่น --tarballs, --packages, --source-cache แต่ถ้าต้องการลบทุกอย่างให้ใช้ --all
conda clean --all
จากนั้นจะมีข้อความบอกว่าอะไรจะถูกลบไปบ้าง กดตกลงลบไปเท่านี้ก็ได้จะพื้นที่คืนมาแล้ว
ใครที่รู้สึกว่าโฟลเดอร์ที่ติดตั้ง anaconda หรือ miniconda ไว้มีขนาดใหญ่ผิดปกติอาจเป็นเพราะไฟล์พวกนี้ ให้ลองใช้คำสั่งนี้ดูอาจได้พื้นที่คืนมามากมาย
สร้างสภาพแวดล้อมแยกขึ้น ปกติเวลาพิมพ์คำสั่ง python ในคอมมานด์ไลน์จะเป็นการใช้ไพธอนที่ลงเอาไว้ในเครื่อง
แต่ถ้าหากมีการลงไพธอนไว้หลายตัวในเครื่อง เวลาสั่งรันจะเป็นการไปรันตัวไหนก็ขึ้นอยู่กับการตั้งพาธ
บางครั้งเราอาจมีความจำเป็นต้องใช้ไพธอนหลายตัวในเครื่องเดียว เพื่อแยกทำงานต่างกัน เช่นอาจต้องการใช้ไพธอนเวอร์ชันเก่าเพื่อทำงานบางอย่าง ในขณะที่เวอร์ชันใหม่ก็ต้องการใช้ด้วย ในบริบทที่ต่างกัน
กรณีแบบนั้นอาจต้องมีการเปลี่ยนสลับใช้ไปมาระหว่างสภาพแวดล้อมที่ใช้ไพธอนคนละตัวกัน
conda สามารถทำการสร้างสภาพแวดล้อมแยกขึ้นมาใหม่ได้ และสามารถทำการสลับไปมาระหว่างแต่ละสภาพแวดล้อมได้โดยง่าย
ในการสร้างสภาพแวดล้อมใหม่ขึ้นมาให้พิมพ์ตามนี้
conda create -n ชื่อสภาพแวดล้อมใหม่ python=เวอร์ชัน แพ็กเกจที่จะติดตั้งไปด้วย (อาจใส่หลายตัว)
-n อาจแทนด้วย --name
ถ้าใส่แค่ python เฉยๆไม่พิมพ์ =เวอร์ชัน ต่อท้าย ก็จะเป็นเวอร์ชันล่าสุด
นอกจากนี้ถ้าไม่ใส่ python= แต่ใส่เป็นภาษาอื่นก็จะกลายเป็นการลงสภาพแวดล้อมสำหรับภาษาอื่นไป เช่น ruby, perl
หากไม่ใส่ชื่อแพ็กเกจต่อท้ายไปสภาพแวดล้อมที่สร้างขึ้นมาใหม่จะมีมอดูลเสริมอยู่แค่ตัวที่เป็นพื้นฐานไม่กี่ตัว เช่น pip เป็นต้น
ตัวอย่าง เช่นต้องการไพธอน 3.4 ซึ่งเป็นรุ่นเก่า แล้วติดตั้ง numpy และ matplotlib
conda create -n pytho34 python=3.4 numpy matplotlib
เมื่อสร้างขึ้นมาแล้วต้องการเริ่มใช้สภาพแวดล้อมใหม่ก็พิมพ์
conda activate ชื่อสภาพแวดล้อม
เพื่อให้รู้ว่าเข้าสู่สภาพแวดล้อมใหม่แล้วก็ลองพิมพ์ python เข้าดู จะพบว่าเป็นการใช้ไพธอนตัวในสภาพแวดล้อมใหม่
และอาจลองสั่ง conda list ดู จะเห็นว่ามีแพ็กเกจอยู่ไม่กี่ตัว
การลงแพ็กเกจเพิ่มให้สภาพแวดล้อมนี้ทีหลังทำได้โดย
conda install -n ชื่อสภาพแวดล้อม ชื่อแพ็กเกจ
เช่น
conda install -n pytho34 pandas
เพียงแต่ว่าถ้าเข้าไปอยู่ในสภาพแวดล้อมนี้แล้วก็พิมพ์แค่ conda install เฉยๆ ไม่ต้องระบุชื่อสภาพแวดล้อมแล้ว
หาก conda activate เฉยๆ โดยไม่ใส่ชื่อสภาพแวดล้อมจะเป็นการเข้าสู่สภาพแวดล้อมหลัก
ถ้าใช้ pip ขณะที่อยู่ในนี้ก็จะเป็นการลงแพ็กเกจเสริมให้สภาพแวดล้อมนี้ สามารถใช้ pip ช่วยลงสิ่งที่ conda ไม่มีได้
ถ้าต้องการเลิกใช้สภาพแวดล้อมนั้น จะออกจากสภาพแวดล้อมนั้นก็พิมพ์
conda deactivate
ถ้าต้องการดูว่ามีสภาพแวดล้อมอะไรถูกลงไว้บ้างก็พิมพ์
conda info -e
conda info --envs
conda env list
จะเลือกพิมพ์อย่างไหนก็ได้ แล้วจะได้ผลประมาณนี้
base * /home/phyblas/anaconda3
pytho34 /home/phyblas/anaconda3/envs/pytho34
จะเห็นว่าสภาพแวดล้อมใหม่ถูกสร้างอยู่ภายในโฟลเดอร์ของ anaconda
ส่วนสภาพแวดล้อมหลักจะถูกเรียกว่า base
หากจะสร้างสภาพแวดล้อมใหม่โดยคัดลอกจากตัวเดิมที่มีอยู่ก็
conda create --name ชื่อสภาพแวดล้อมใหม่ --clone ชื่อสภาพแวดล้อมเดิม
เมื่อต้องการลบสภาพแวดล้อมออกก็
conda env remove -n ชื่อสภาพแวดล้อม
หรือไม่ก็
conda remove -n ชื่อสภาพแวดล้อม --all
เราสามารถเก็บบันทึกข้อมูลสภาพแวดล้อมที่สร้างไว้พร้อมกับแพ็กเกจที่ลงไว้ในนั้นทั้งหมดเพื่อจะนำกลับมาใช้ใหม่ได้โดยใช้คำสั่ง export แล้วบันทึกลงในไฟล์
ถ้าไม่ได้กำลังอยู่ในสภาพแวดล้อมนั้นก็ ให้ใส่ -n หรือ --name ระบุชื่อสภาพแวดล้อมไปด้วย
conda env export -n ชื่อสภาพแวดล้อม > ชื่อไฟล์
ถ้าอยู่ในสภาพแวดล้อมนั้นอยู่แล้วก็จะเป็นการบันทึกข้อมูลสภาพแวดล้อมนั้นอยู่แล้ว จึงไม่ต้องใส่ -n เพื่อระบุชื่อสภาพแวดล้อม
conda env export > ชื่อไฟล์
จากนั้นเอาไฟล์นั้นมาใช้สร้างสภาพแวดล้อมใหม่ตามที่บันทึกไว้ได้โดยใช้ -f หรือ --file แล้วตามด้วยชื่อไฟล์
conda env create -f ชื่อไฟล์
อ้างอิง