KHẢO SÁT MỘT SỐ TÍNH NĂNG PYTHON DÀNH CHO KỸ SƯ DEVNET
1/ Vấn đề môi trường ảo (virtual Environment)
Với mỗi dự án cần sử dụng những phiên bản Python khác nhau, những thư viện hay module khác nhau. Vậy làm sao để chúng ta quản lý một cách độc lập, hiệu quả môi trường làm việc cho từng dự án? Virtual Environment (venv) dịch nôm na là môi trường ảo hay được hiểu là công cụ cho phép chúng ta tạo, quản lý môi môi trường ảo độc lập cho từng dự án.
Chúng ta có thể hiểu một cách đơn giản hơn Virtual Environmentgiống như máy ảo (virtual Machine). Nó thiết lập một môi trường ảo, giúp chúng ta thử nghiệm các package của Python mà không làm ảnh hưởng đến những package đã được cài đặt sẵn. Ví dụ chúng ta muốn thử nghiệm với Python 2.x trong khi trên hệ thống đang cài đặt Python 3.x. Cũng giống như việc dùng Virtual Machine để thử nghiệm phiên bản Windows beta (Windows Insider Program) mới nhất mà không muốn làm ảnh hưởng đến phiên bản đang có trên máy.
Hãy thử nghĩ đến trường hợp code chạy trên máy mình nhưng không chạy được trên máy khách, chúng ta kiểm tra thì phát hiện ra môi trường chạy khác nhau, phiên bản thư viện khác nhau ... Nếu sử dụng Virtual Environment cho dự án ngay từ đầu thì có lẽ mọi việc đã đơn giản hơn rồi. Còn một vấn đề nữa là không phải package nào cài từ pip (hoặc từ nguồn khác) cũng an toàn, khi chúng ta dùng user root hoặc user có quyền sudo install để cài đặt nó, mà nó là một package chứa code phá hoại thì nó có thể huỷ diệt cả hệ thống (vì user root có quyền làm mọi thứ).
Cách venv hoạt động
Khái niệm biến PATH : PATH là một biến môi trường (environment variable) chứa danh sách các thư mục mà chương trình Shell sẽ tìm kiếm cho file thực thi tương ứng với tên lệnh được đưa ra bởi người dùng.
Ví dụ, khi gõ lệnh ls thì thật ra ta đang yêu cầu Shell chạy file /bin/ls. Nếu không ghi đường dẫn tuyệt đối, thì làm sao để shell hiểu phải tìm lệnh ls ở đâu? Lúc này đây ta cần một chỗ lưu lại đường dẫn đến các chương trình ở 1 nơi nào đó để hệ điều hành biết mà giới hạn chỗ đi tìm. Biến $PATH chính là chỗ để lưu lại đường dẫn trên, mà không chỉ một, mà có thể có nhiều đường dẫn, bởi người dùng có thể chứa chương trình ở nhiều folder khác nhau. Các đường dẫn trong $PATH không bình đẳng. Đường dẫn ở trên ngoài cùng bên trái sẽ được ưu tiên tìm trước, lần lượt ưu tiên từ trái sang phải (có thể từ trên xuống dưới tùy theo cách hiển thị). Một khi Linux đã tìm được chương trình nó cần, nó sẽ dừng việc tìm kiếm trong các đường dẫn phía sau. Tức là có thể có 2 files thực thi cùng tên lưu ở 2 nơi, thì Linux chỉ chạy file đầu tiên mà nó tìm thấy.
(Hình 1: Nội dung biến PATH trong Ubuntu)
venv hoạt động được là nhờ vào cách mà Python thực hiện import một module, khi ta import spam:
Trình thông dịch tìm lần lượt theo thứ tự, khi tìm được module spam ở tại vị trí nào nó sẽ dừng ngay:
(Hình 2: Builtin module)
(Hình 3: Nội dung một biến sys.path)
Cách venv hoạt động:
Khi ta bật (activate) một venv lên, thực tế là ta thay đổi sys.path bằng cách chèn đường dẫn đến venv lên đầu sys.path (cơ chế ưu tiên như PATH), vì vậy khi thực hiện import, Python sẽ tìm trong venv trước.
Chúng ta cùng xem venv đã tác động đến python sys.path như thế nào.
Bật venv
Tắt venv
Cài đặt virtualenv
Nếu đang dùng hệ linux thì rất tốt. Nếu không các bạn nên bật Windows Subsystem for Linux Installation (WSL) để tận dụng tối đa tất cả các chức năng của venv trên Windows 10. Bài viết này chỉ giới hạn hướng dẫn cài trên Linux.
Bước 1: Cài Python (dĩ nhiên).
Vì các bản distro linux có cách cài đặt khác nhau nên các bạn có thể search để tìm cách cài đặt phù hợp với distro mình đang sử dụng.
Bước 2: Cài đặt PIP
Vui lòng search cách cài pip (cũng do có quá nhiều distro linux khác nhau).
Bước 3: Cài đặt virtualenv
Có hai công cụ chính được sử dụng để tạo môi trường ảo:
Có thể được cài đặt với trình quản lý gói cài pip bằng cách chạy lệnh: pip install virtualenv với python2 và pip3 install virtualenv với python3.
(Hình 4: Cài virtualenv với Python 3)
Cài đặt venv:
venv được tích hợp sẵn với Python 3, người dùng Debian/Ubuntu sẽ cần chạy:
sudo apt-get install python3-venv
Cả hai công cụ đều giúp chúng ta tạo môi trường ảo cho project Python theo cách tương tự nhau. Chúng ta có thể sử dụng bất cứ công cụ nào muốn, trong trường hợp gặp vấn đề với 1 trong 2, chúng ta hoàn toàn có thể sử dụng công cụ còn lại.
(Hình 5: Cài đặt venv)
Tạo môi trường:
Mình dùng venv:
Trong đó meomeo là tên folder chứa thông tin Virtual Environment cho dự án của chúng ta, có thể đổi tên cho phù hợp hơn như /venv /chitchit để dễ gợi nhớ hơn.
Activate môi trường vừa tạo trên Linux:
Bây giờ chúng ta thấy ở đầu dòng lệnh có thêm (meomeo), điều đó có nghĩa là môi trường đã được kích hoạt. Cả hai công cụ đều cài đặt sẵn pip và setuptools. Chúng ta nên cập nhật.
Thoát khỏi môi trường ảo ta dùng lệnh:
Đóng gói và cài đặt lại
Khi ta muốn chuyển dự án ta sang máy khác (ở đây là dựu án meomeo) ta ko thể copy folder theo cách bình thường vì nó không có tác dụng. Vì mỗi venv là có các đường dẫn riêng, phiên bản python khác nhau cũng như nhiều thông tin khác nữa. Để di chuyển ta cần đóng gói và cài đặt lại venv trên máy mới, cách cách đơn giản nhất là sử dụng pip để freeze các gói ở máy cũ sau đó cài đặt lại ở máy mới.
Trên máy cũ hoặc forlder cũ:
Trên máy mới hoặc project folder mới:
Kết quả:
Bằng cách trên, các thông tin về gói cài đặt của dự án bao gồm tên gói cài đặt, phiên bản đang được cài sẽ được lưu lại trong file requirements.txt.
1/ Vấn đề môi trường ảo (virtual Environment)
Với mỗi dự án cần sử dụng những phiên bản Python khác nhau, những thư viện hay module khác nhau. Vậy làm sao để chúng ta quản lý một cách độc lập, hiệu quả môi trường làm việc cho từng dự án? Virtual Environment (venv) dịch nôm na là môi trường ảo hay được hiểu là công cụ cho phép chúng ta tạo, quản lý môi môi trường ảo độc lập cho từng dự án.
Chúng ta có thể hiểu một cách đơn giản hơn Virtual Environmentgiống như máy ảo (virtual Machine). Nó thiết lập một môi trường ảo, giúp chúng ta thử nghiệm các package của Python mà không làm ảnh hưởng đến những package đã được cài đặt sẵn. Ví dụ chúng ta muốn thử nghiệm với Python 2.x trong khi trên hệ thống đang cài đặt Python 3.x. Cũng giống như việc dùng Virtual Machine để thử nghiệm phiên bản Windows beta (Windows Insider Program) mới nhất mà không muốn làm ảnh hưởng đến phiên bản đang có trên máy.
Hãy thử nghĩ đến trường hợp code chạy trên máy mình nhưng không chạy được trên máy khách, chúng ta kiểm tra thì phát hiện ra môi trường chạy khác nhau, phiên bản thư viện khác nhau ... Nếu sử dụng Virtual Environment cho dự án ngay từ đầu thì có lẽ mọi việc đã đơn giản hơn rồi. Còn một vấn đề nữa là không phải package nào cài từ pip (hoặc từ nguồn khác) cũng an toàn, khi chúng ta dùng user root hoặc user có quyền sudo install để cài đặt nó, mà nó là một package chứa code phá hoại thì nó có thể huỷ diệt cả hệ thống (vì user root có quyền làm mọi thứ).
Cách venv hoạt động
Khái niệm biến PATH : PATH là một biến môi trường (environment variable) chứa danh sách các thư mục mà chương trình Shell sẽ tìm kiếm cho file thực thi tương ứng với tên lệnh được đưa ra bởi người dùng.
Ví dụ, khi gõ lệnh ls thì thật ra ta đang yêu cầu Shell chạy file /bin/ls. Nếu không ghi đường dẫn tuyệt đối, thì làm sao để shell hiểu phải tìm lệnh ls ở đâu? Lúc này đây ta cần một chỗ lưu lại đường dẫn đến các chương trình ở 1 nơi nào đó để hệ điều hành biết mà giới hạn chỗ đi tìm. Biến $PATH chính là chỗ để lưu lại đường dẫn trên, mà không chỉ một, mà có thể có nhiều đường dẫn, bởi người dùng có thể chứa chương trình ở nhiều folder khác nhau. Các đường dẫn trong $PATH không bình đẳng. Đường dẫn ở trên ngoài cùng bên trái sẽ được ưu tiên tìm trước, lần lượt ưu tiên từ trái sang phải (có thể từ trên xuống dưới tùy theo cách hiển thị). Một khi Linux đã tìm được chương trình nó cần, nó sẽ dừng việc tìm kiếm trong các đường dẫn phía sau. Tức là có thể có 2 files thực thi cùng tên lưu ở 2 nơi, thì Linux chỉ chạy file đầu tiên mà nó tìm thấy.
(Hình 1: Nội dung biến PATH trong Ubuntu)
venv hoạt động được là nhờ vào cách mà Python thực hiện import một module, khi ta import spam:
Trình thông dịch tìm lần lượt theo thứ tự, khi tìm được module spam ở tại vị trí nào nó sẽ dừng ngay:
- Các module tích hợp (builtin module) có sẵn với tên spam.
(Hình 2: Builtin module)
- Nếu không tìm thấy, nó sẽ tìm kiếm một file có tên spam.py trong danh sách các thư mục được cung cấp bởi biến sys.path (Đây là một biến môi trường chứa đường dẫn tìm kiếm cho tất cả các Module python.). Mà biến sys.path được khởi tạo từ các vị trí này:
- Thư mục chứa các lệnh đầu vào (nếu không được chỉ định thì nó sẽ là thư mục hiện tại).
- PYTHONPATH. Nó có cơ chế hoạt động y như PATH của hệ thống Linux mà mình đã trình bày ở trên. (Mặc định ở tại đây).
- Thư mục mặc định có vị trí phụ thuộc vào chọn lựa trong quá trình cài đặt.
- Nếu không tìm thấy import lỗi.
(Hình 3: Nội dung một biến sys.path)
Cách venv hoạt động:
Khi ta bật (activate) một venv lên, thực tế là ta thay đổi sys.path bằng cách chèn đường dẫn đến venv lên đầu sys.path (cơ chế ưu tiên như PATH), vì vậy khi thực hiện import, Python sẽ tìm trong venv trước.
Chúng ta cùng xem venv đã tác động đến python sys.path như thế nào.
Bật venv
Tắt venv
Cài đặt virtualenv
Nếu đang dùng hệ linux thì rất tốt. Nếu không các bạn nên bật Windows Subsystem for Linux Installation (WSL) để tận dụng tối đa tất cả các chức năng của venv trên Windows 10. Bài viết này chỉ giới hạn hướng dẫn cài trên Linux.
Bước 1: Cài Python (dĩ nhiên).
Vì các bản distro linux có cách cài đặt khác nhau nên các bạn có thể search để tìm cách cài đặt phù hợp với distro mình đang sử dụng.
Bước 2: Cài đặt PIP
Vui lòng search cách cài pip (cũng do có quá nhiều distro linux khác nhau).
Bước 3: Cài đặt virtualenv
Có hai công cụ chính được sử dụng để tạo môi trường ảo:
- virtualenv là công cụ tiêu chuẩn trong nhiều năm, có thể được sử dụng với cả Python 2 và 3.
- venv (pyvenv) được thêm vào thư viện chuẩn trong Python 3.3.
Có thể được cài đặt với trình quản lý gói cài pip bằng cách chạy lệnh: pip install virtualenv với python2 và pip3 install virtualenv với python3.
(Hình 4: Cài virtualenv với Python 3)
Cài đặt venv:
venv được tích hợp sẵn với Python 3, người dùng Debian/Ubuntu sẽ cần chạy:
sudo apt-get install python3-venv
Cả hai công cụ đều giúp chúng ta tạo môi trường ảo cho project Python theo cách tương tự nhau. Chúng ta có thể sử dụng bất cứ công cụ nào muốn, trong trường hợp gặp vấn đề với 1 trong 2, chúng ta hoàn toàn có thể sử dụng công cụ còn lại.
(Hình 5: Cài đặt venv)
Tạo môi trường:
Mình dùng venv:
Trong đó meomeo là tên folder chứa thông tin Virtual Environment cho dự án của chúng ta, có thể đổi tên cho phù hợp hơn như /venv /chitchit để dễ gợi nhớ hơn.
Activate môi trường vừa tạo trên Linux:
Bây giờ chúng ta thấy ở đầu dòng lệnh có thêm (meomeo), điều đó có nghĩa là môi trường đã được kích hoạt. Cả hai công cụ đều cài đặt sẵn pip và setuptools. Chúng ta nên cập nhật.
Thoát khỏi môi trường ảo ta dùng lệnh:
Đóng gói và cài đặt lại
Khi ta muốn chuyển dự án ta sang máy khác (ở đây là dựu án meomeo) ta ko thể copy folder theo cách bình thường vì nó không có tác dụng. Vì mỗi venv là có các đường dẫn riêng, phiên bản python khác nhau cũng như nhiều thông tin khác nữa. Để di chuyển ta cần đóng gói và cài đặt lại venv trên máy mới, cách cách đơn giản nhất là sử dụng pip để freeze các gói ở máy cũ sau đó cài đặt lại ở máy mới.
Trên máy cũ hoặc forlder cũ:
Trên máy mới hoặc project folder mới:
Kết quả:
Bằng cách trên, các thông tin về gói cài đặt của dự án bao gồm tên gói cài đặt, phiên bản đang được cài sẽ được lưu lại trong file requirements.txt.