Những điều học được từ Conda
TIL
719
Python
59
conda
1
White

Vũ Garo viết ngày 12/04/2019

Vài lời đầu tiên ...

Em viết bài viết này chỉ là để ghi chú lại những gì mình học được, tiện cho việc ôn lại sau này. Hơn nữa, vì em mới chỉ học lớp 11 nên chắc chắn sẽ có những sai sót. Vì vậy em cũng mong được các pro trên kipalog chỉ bảo. :smiley:
Conda

Tại sao ta lại cần conda?

Trước hết thì Conda là một package manager và enviroment manager được viết bằng python và có thể dùng cho nhiều ngôn ngữ khác nhau. Nó có thể:

  • Tạo và quản lý các môi trường.
  • Tìm kiếm và cài đặt packages vào một môi trường có sẵn Ok tại sao ta cần conda

Ví dụ như trong quá trình làm việc một dự án cũ, đương nhiên các phiên bản package mà nó sử dụng sẽ cũ luôn theo. Mà những package cũ thì thường sẽ có chút khác biệt với những phiên bản mới hơn. Để làm việc thì ta phải cài đặt lại môi trường hoàn toàn tương thích. Giờ sao chẳng lẽ máy đang python 3.x cài xuống python 2.x rồi còn các project khác. Và conda xuất hiện như một vị anh hùng. Nó cho phép ta tạo một môi trường riêng biệt độc lập với máy chính và độc lập luôn với các môi trường khác.
Giống như nhà có hai cái phòng, đêm đến một thằng học bài một thằng hát karaoke mà không ảnh hưởng gì tới nhau ý.
Ảnh copy tại medium

Các package mà nó có thể cài đặt có thể được xem tại repo.continuum.io và được duy trì bởi Anaconda. Ngoài ra, theo em biết được nó có thể sử dụng kết hợp với pip.Một package manager khác. Wow một package manager trong một package manager khác. Không hiểu gì luôn! Có điều này xảy ra là vì mục tiêu của conda là để giới hạn lại phiên bản của các package trong python dể chúng có độ tương thích cao. Trong khi đó với pip thì lại quản lý toàn bộ..Mặt khác, chúng ta được khuyên hạn chế dùng pip khi không cần thiết.

Nó cũng có thể kết hợp với những dịch vụ như là Travis CI, AppVeyor...Nói đễn đây thôi em vẫn chưa biết mấy cái đó là gì? Nhưng trong biết đâu trong tương lai lại có bài viết ghi lại những điều mình học được từ chúng nó.

Note ở đây một chút: Tác dụng của conda là giới hạn lại các version của các python package mà chúng tương thích với nhau. Ví dụ như cài một package A ở version X thì chỉ có các package B ở version Y1, Y2, Y3 tương ứng có thể cài được. Package B ở version Y5 có conflict nên sẽ không nằm trong kho của conda. Tương tự vậy.

Anaconda và Miniconda

Lúc đầu em rất hay bị nhầm mấy cái này với nhau nhưng bây giờ thì cũng có thể phân biệt được chúng. Về điểm giống nhau, khi cài đặt thì sẽ cài đặt conda và môi trường gốc base. Anaconda là một một thư viện (em không biết phải dùng từ gì nữa) chứa hơn 720 các package được conda hỗ trợ. Còn Minicoda là một bản rút gọn của Anaconda. Khi cài đặt à không phải nói là để cài đặt được conda ta phải cài đặt một trong hai cái trên. Em đang bước đầu tìm hiểu nên chọn Anacoda cho nó nhiều.

Conda như một package manager

Conda cài một package như thế nào?

Conda có 2 chức năng chính. Hãy cùng tìm hiểu về những điều mà nó làm khi ta gõ lệnh install một package.
*Em chưa sài một package manager nào trước đây, nên không biêt nhiều lắm.
Lại một bức ảnh copy nên kích thước hơi to

Hình trên miêu tả việc mà conda làm:

  • Conda sẽ kiểm tra các channels trong file .condarc (theo thứ tự ưu tiên)
  • Sau đó nó sẽ truy cập tới các Repo liên kết có trong channels
  • Tìm kiếm trong Repo có chưa package cần hay không nếu không có thể không thể cài đặt được.
  • Nếu có 1 package thì conda sẽ tiến hành tải xuống và cái đặt. Còn nếu nó cần thêm vài package nữa để hoạt động thì conda sẽ kiểm tra lại xem có thể cài hết cái đám đó hay không. Nếu không thể cài thì thì package mình cần cũng không được cài luôn. Cho dù chỉ một cái package phụ không cài đặt được.

Channels là cái gì?

Trong suốt quá trình học conda đây là cái khó hiểu nhất nhưng mà giờ là cá đơn giản hơn nhều.
Theo các hiểu đơn giản của em, channels là những đường link chứa lên kết đển những Storages(những nơi chứa các packages)
Bức ảnh của người ta
Vậy ta có thể lấy các package từ nhiều nơi khác nhau. Không sợ thiếu!
Khoan! nếu mà 1 package cùng có chứa ở 2 nơi thì sao? Lúc này, channels nào được ưu tiên hơn thì sẽ được cài đặt cho dù ở package ở phiên bản nào đi nữa.

Conda như một enviroment manager

Nãy giờ cứ nói đến conda như một package manager rồi giờ thể xem chức năng còn lại.
Thêm một bức hình
Sau khi cài đặt, một môi trường sẽ được cài đặt sẵn gọi là root enviroment hay base. Mỗi môi trường sẽ độc lập với nhau như đã nói ở trên và python cũng được xem như là một package. Ta có thể tùy chọn nhiều phiên bản python khác nhau để cài đặt. Ngoài ra, ta có thể cài đặt mặc định một số package khi tạo một môi trường mới. Tất cả chúng thì được cấu hình trong file .condarc.

Chắc dừng ở đây thôi! Có vấn đề gì mọi người cứ comment cho em biết.

Tham khảo:
https://docs.conda.io
https://medium.freecodecamp.org/why-you-need-python-environments-and-how-to-manage-them-with-conda-85f155f4353c
Cảm ơn bác @TranDucTam !
Vũ Garo. 9-4-2019

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Vũ Garo

4 bài viết.
1 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
1 0
Linux boot process là quá trình khởi tạo hệ thống Linux. Nó bao bước từ khi ta bật máy đến khi giao diện người dùng sẵn sàng. (Ảnh) Giờ hãy tìm h...
Vũ Garo viết 5 tháng trước
1 0
White
1 0
Trong quá trình vắt não học đạo bên edX cụ thể là khóa Linux thì lại đụng đến khái niệm này. Đây đơn gian chỉ là bài viết ghi lại những gì đã học đ...
Vũ Garo viết 5 tháng trước
1 0
Bài viết liên quan
White
7 3
Description Mình là một thằng thích đọc sách. Nhưng lúc nào cũng bận (lười) nên cũng mấy tháng rồi chưa hoàn thành được quyển sách nào. Mình đa số...
Rice viết 8 tháng trước
7 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
1 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!