φυβλαςのβλογ
phyblas的博客



[python] การใช้ conda เพื่อติดตั้งแพ็กเกจและสร้างสภาพแวดล้อมแบ่งแยก
เขียนเมื่อ 2019/01/18 07:18
แก้ไขล่าสุด 2021/09/28 16:42
ในการลงแพ็กเกจใหม่ในไพธอนนั้นคนนิยมใช้ 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 ชื่อไฟล์



อ้างอิง


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python
-- คอมพิวเตอร์ >> shell

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目录

从日本来的名言
模块
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
机器学习
-- 神经网络
javascript
蒙古语
语言学
maya
概率论
与日本相关的日记
与中国相关的日记
-- 与北京相关的日记
-- 与香港相关的日记
-- 与澳门相关的日记
与台湾相关的日记
与北欧相关的日记
与其他国家相关的日记
qiita
其他日志

按类别分日志



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  查看日志

  推荐日志

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ