Hướng dẫn virtual environment python - python môi trường ảo
Show Đã đăng vào thg 9 28, 2015 5:57 SA 3 phút đọc 3 phút đọc Virtual Environments là gì và dùng để làm gì? Virtual Environment dịch nôm na là môi trường ảo Cũng giống như máy ảo (Virtual Machine), Virtual Environment thiết lập một môi trường ảo, cho phép bạn nghịch ngợm lung tung với các packages của Python mà không làm ảnh hưởng đến những packages đã được cài đặt sẵn trên Python. Ví dụ bạn muốn thử nghiệm với Django 1.8 trong khi trên hệ thống đang cài đặt Django 1.4 LTS. Cũng giống như việc bạn dùng Virtual Machine để thử nghiệm phiên bản Chrome beta 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. Cũng giống như máy ảo (Virtual Machine), Virtual Environment thiết lập một môi trường ảo, cho phép bạn nghịch ngợm lung tung với các packages của Python mà không làm ảnh hưởng đến những packages đã được cài đặt sẵn trên Python. Ví dụ bạn muốn thử nghiệm với Django 1.8 trong khi trên hệ thống đang cài đặt Django 1.4 LTS. Cũng giống như việc bạn dùng Virtual Machine để thử nghiệm phiên bản Chrome beta 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.Công cụ tạo ra Virtual Environment trên Python là virtualenv. virtualenv tạo ra một thư mục chứa tất cả những thứ cần thiết (executables, libraries). Sử dụng Virtual Environment như thế nào? Trước hết để sử dụng được Virtual Environment thì bạn phải cài virtualenv cái đã. 2Tạo Virtual Environment 3virtualenv sẽ tạo ra một thư mục có tên là [project_name] chứa tất cả những gì cần thiết. Hãy thử xem nội dung của thư mục này:
Nếu trên server có nhiều phiên bản Python (2.x, 3.x) bạn hoàn toàn có thể khởi tạo Virtual Environment với một phiên bản chỉ định:
Hoặc bạn có thể tạo một Virtual Environment mà không có các packages đã được cài đặt sẵn (trong trường hợp bạn muốn làm mọi thứ từ đầu: 4Sử dụng Virtual Environment Khởi động Virtual Environment bằng câu lệnh: 5Tên của Virtual Environment sẽ xuất hiện ở phía trước command prompt, cho ta thấy Python đang sử dụng Virtual Environment. Từ đây tất cả những packages được cài đặt mới sẽ nằm trong thư mục [project_name] Thoát khỏi Virtual Environment Sử dụng câu lệnh 6Tìm hiểu về pyenv để thiết lập môi trường ảo nhanh chóng Pyenv là cách để bạn thiết lập nhanh chóng giữa các môi trường ảo hoặc sử dụng các phiên bản python khác nhau. Nếu bạn từng sử dụng rbenv trong ruby thì pyenv cũng được fork từ rbenv. Sau đây là các bước để cài đặt và sử dụng rbenv Di chuyển đến vị trí muốn cài pyenv: thông thường 7 8Xác định biến môi trường Pyenv_root 9 0Add pyenv init vào shell 1Restart shell của bạn 2Cài môi trường phiên bản python bạn muốn sử dụng.VD 2.7.8 3Bạn có thể cài nhiều phiên bản python. Set 1 phiên bản mặc định 4Hoặc cục bộ ở 1 thư mục 5All rights reserved Là một lập trình viên chuyên nghiệp Python, việc sử dụng thành thạo môi trường lập trình "ảo" gần như là bắt buộc. Môi trường "ảo" trong Python được thiết lập như thế nào? Có những cách thiết lập ra làm sao ? Tại sao phải sử dụng virtual environments? Bài viết dưới đây sẽ đưa ra các luận điểm và đề mục cũng như cách giải thích đơn giản giúp các bạn có thể nhanh chóng tiếp cận với virtual environments. Ghi chú: Tôi xin phép viết tắt VE thay cho từ Virtual environment và tạm dừng dịch nghĩa từ khóa trên sang tiếng Việt là môi trường "ảo" để có thể giữ nguyên ý nghĩa của từ khóa. Bài viết này được tôi thực hiện trên Windows vì các bài hướng dẫn về VE trên Linux đã hơi bị nhiều rồi. Và các user sử dụng Linux thì thuộc vào thành phần expert-user rồi nên chắc...không cần hướng dẫn nhiều họ cũng có thể làm được. 1. Giới thiệu Virtual environment (VE) trong PythonLà một lập trình viên Python, bạn không thể chỉ làm mãi một dự án với một số library/module/framework được cài đặt thẳng vào thư viện gốc được. Bạn phải luôn sẵn sàng với việc đầu tuần code Flask-API trên nền tảng Python 3.6.x; giữa tuần thì sửa một web-application của Django trên nền tảng Python 3.7.x; cuối tuần bạn lại thấy Python 3.9.0 vừa mới release, bạn muốn test một số feature mới được công bố; à, còn chưa kể dự án Odoo10 đang nhận maintain và chạy trên nền tảng Python2.7 nữa chứ. Mỗi dự án lại có một loạt cái thư viện khác nhau, Dự án Flask A dùng thư viện Flask 0.12, dự án Flask B lại dùng thư viện Flask 1.02; hoặc như Django hiện tại có nhiều dự án chạy song song 2.2, 3.0, ....Bạn chỉ có một cái laptop mà với mỗi project như trên bạn không thể nào cài đặt chung hết trên thư mục cài đặt gốc của Python được. Chẳng nhẽ mỗi dự án lại cài một bản Python sang một thư mục khác nhau và thực hiện khởi tạo môi trường thông dịch một cách thủ công ? Sớm nắm bắt được nhu cầu của các lập trình viên, "ông chú Python" - Mr Guido và các cộng sự đã cho ra đời một công cụ "chất" để hỗ trợ các lập trình viên được khám phá thoải mái với Python là Virtual environment. Virtual Environment dịch nôm na là môi trường ảo. Cũng giống như máy ảo (Virtual Machine), Virtual Environment thiết lập một môi trường ảo, cho phép bạn thoải mái thực hiện "vọc" (cài đặt rồi xóa, cài đặt các phiên bản khác nhau) lung tung với các packages của Python mà không sợ làm ảnh hưởng đến những dự án đang có sẵn. Lợi ích của việc sử dụng VE.Trên máy tính của tôi đang cài song song 3 phiên bản của Python là Python 2.7, 3.6, 3.8, 3.9. Do đặc thù của mỗi dự án lại sử dụng các package khác nhau nên mỗi dự án tôi sẽ tạo cho nó một VE. Tại mỗi VE, tôi thoải mái cài đặt các thư viện cần dùng mà không phải lo nghĩ đến việc cài thư viện này sẽ làm ảnh hưởng đến việc khởi chạy các dự án khác vì mỗi VE là một môi trường ảo hoàn toàn độc lập. Ví dụ minh họa: Ngoài lợi ích trên, VE còn cung cấp chức năng cho phép export chính xác các package đang sử dụng trong VE (chính xác đến tận version bao nhiêu), file cấu hình môi trường này thường được đặt tên là requirements.txt).Với mỗi dự án, khi đẩy lên git hoặc các SVN khác, tôi sẽ cần gắn thêm file cấu hình môi trường ảo 'requirements.txt' này vào.Khi cần xây dựng VE cho dự án ở một môi trường làm việc khác, tôi sẽ thực hiện import file requirements.txt vào VE là được. Việc import vào cũng đơn giản như export vậy, hệ thống sẽ tự động thực hiện sắp xếp các thư viện theo thứ tự để thực hiện install vào VE.Thật là tiện lợi đúng không? 2. Cách xây dựng và sử dụng VE.Theo thời gian và nhu cầu công việc, Python cung cấp nhiều cách thức để thực hiện tạo ra các VE, dưới đây, tôi sẽ giới thiệu với các bạn một số cách mà thường được các lập trình viên dùng nhiều. 2.1. Sử dụng công cụ virtualenvVirtualenv gần như là một công cụ thường gặp nhất với các lập trình viên Python khi muốn thiết lập một VE (https://virtualenv.pypa.io/en/latest/)Trước khi muốn sử dụng nó thì chúng ta sẽ phải thực hiện install ra. Với terminal mặc định trên máy của bạn, bạn chỉ cần gõ dòng lệnh: 6Trước khi muốn sử dụng nó thì chúng ta sẽ phải thực hiện install ra. Với terminal mặc định trên máy của bạn, bạn chỉ cần gõ dòng lệnh: 6Kết quả sẽ như dưới đây:
Sau khi cài đặt, thực hiện kiểm tra version của virtualenv
Sau khi install thư viện, thực hiện di chuyển đến vị trí muốn đặt VE. Tại vị trí này, chúng ta thực hiện cài đặt VE, bằng câu lệnh: 7 . Trong đó hr_api_django2_env là tên của VE mà chúng ta muốn đặt. Thông thường tôi có thói quen đặt tên theo project và framework chủ đạo hoặc package chủ đạo, với tiếp hậu ngữ là _env (đây là cách đặt tên để dễ nhớ với tôi, với các bạn thì tùy theo style của mỗi người).
Như vậy là chúng ta đã khởi tạo được VE cho dự án hr_api dự kiến sẽ sử dụng django2. Chúng ta cùng xem bên trong thư mục VE có chứa những gì nhé.
Bên trong thư mục VE có chứa 2 thư mục con Lib và Scripts, kèm 1 file config cho môi trường.
Thư mục Lib có chứa thư mục site-packages, như vậy đây sẽ là nơi chứa các package mà chúng ta sẽ cài đặt vào VE.
Hiện tại thì thư mục này trên VE đồng bộ với thư mục site-packages của Python3.8 trên máy của tôi (do tôi thường cài đặt package vào từng VE riêng biệt), nếu lỡ máy của bạn đã cài một số package sẵn rồi, bạn không muốn các VE sẽ kéo các package đó vào thì khi thực hiện khởi tạo VE, bạn thêm tham số 8 vào là được.Ví dụ: 9 9Tiếp tục khám phá xem thư mục Scripts có gì nhé.
Khởi chạy VE:Để khởi chạy VE, từ CMD, chúng ta gọi đến file activate.bat
Sau khi thực hiện active thành công thì phía trên đầu của đường dẫn sẽ có tên của VE ở trong dấu (hr_api_django2_env)
0Phần này các bạn cần lưu ý: Nếu không có tham số =2.2.0 phía sau thì hệ thống sẽ tự động tìm thư viện release mới nhất trên pypi (The Python Package Index), tại thời điểm này thì Django mới nhất là phiên bản 3.1.2 (tháng 10/2020).
Sau khi cài đặt xong, chúng ta kiểm tra xem VE của chúng ta đã được cài đặt thành công gói django2.2.0 chưa bằng câu lệnh pip -- freeze (hoặc pip freeze):
Với kết quả hiển thị như trên thì VE của chúng ta đã có phiên bản Django2.2 Export thư viện Để thực hiện export các package trong VE ra và để mang đến import trong các VE khác, chúng ta sẽ sử dụng syntax: 1 0File requirements.txt sẽ được tạo ra tại thư mục hiện tại mà chúng ta đang đứng. Mở file requirements.txt, chúng ta sẽ có nội dung: Import các package vào VE Giờ chúng ta sẽ xóa package Django2.2 sau đó thực hiện import lại vào VE bằng lệnh 2 1Như này là đã xóa thành công thư viện Django2.2 trong VE. 2Khi thực hiện cài đặt các package từ file requirements.txt, nếu các package đã có trong VE, thì pip sẽ bỏ qua như ví dụ trên với package pytz==2020.1, sqlparse==0.4.1. Ngắt khởi chạy VE. Để ngắt VE, chúng ta thực hiện đứng từ một thư mục nào đó, gọi vào file Scripts\deactivate.bat 3Do đã thoát khỏi VE nên dòng thông tin (hr_api_django2_env) ở đầu thư mục cũng biến mất. Trước đây, tôi cũng thường xuyên sử dụng virtualenv do từ thời Python2.7 công cụ này gần như là mạnh nhất để xây dựng các VE. Nhược điểm của nó là phải cài đặt thêm gói package virtualenv, nếu máy tính của bạn có chứa nhiều phiên bản Python và bạn liên tục phải switch qua lại giữa các project thuộc các phiên bản khác nhau thì dùng virtualenv không phải là phương án tối ưu. Lý do:- Khi muốn cài đặt thư viện virtualenv, bạn sẽ phải di chuyển thư mục trên terminal đến đúng vị trí chứa pip của phiên bản Python bạn cần dùng để gọi lệnh pip install virtualenv.- Khi muốn tạo mới một VE mà không phải trên version Python mặc định, bạn cũng phải di chuyển đến vị trí chứa python.exe (với windows) và thực hiện gọi lệnh tạo VE. 4Để tạo một VE, đứng từ thư mục chứa python.exe, gọi đến thư viện virtualenv với tham số -m và thông tin đường dẫn tuyệt đối và tên của VE muốn tạo 5Phía bên thư mục chứa VE: 62.2. Sử dụng công cụ venvNắm được nhược điểm của việc sử dụng package 3, từ phiên bản Python3.5, đã có công cụ "chính chủ" tích hợp sẵn vào site-packages của Python, đó là công cụ 4 (https://docs.python.org/3/library/venv.html). Các lập trình viên Python không cần phải cài đặt thêm package nào khác cũng có thể nhanh chóng tạo ra các VE.Tuy nhiên một số máy tính do cài đặt bản Python-minimal nên bị thiếu thư viện, nếu bị thiếu thì cần cài bổ sung package: python3-venv (thường gặp trên máy cài hệ điều hành Linux)Tuy nhiên một số máy tính do cài đặt bản Python-minimal nên bị thiếu thư viện, nếu bị thiếu thì cần cài bổ sung package: python3-venv (thường gặp trên máy cài hệ điều hành Linux) Khởi tạo VE Với bản Python mặc định trên máy tính, chỉ cần gọi lệnh python -m venv path_to_VE 7Với bản Python khác với bản mặc định, các làm tương tự như dùng thư viện virtualenv, chỉ khác là bạn sẽ không cần cài đặt package trước khi sử dụng. 8Sau câu lệnh tạo ra môi trường, không có phản hồi gì có nghĩ là đã tạo thành công nhé. Tại thư mục chứa VE: 93. Một số lưu ý.Phía trên tôi đã giới thiệu với các bạn các thông tin về VE và 2 phương pháp khởi tạo môi trường ảo. Phần tiếp theo đây, tôi sẽ giới thiệu với các bạn một số thông tin bổ sung cần lưu ý. 3.1. Lệnh khởi tạo và ngắt VE trên Linux/MacOS.Trên Windows, các bạn sẽ gọi vào file activate.bat/deactivate.bat để khởi chạy và ngắt VE. Trên Lunix/MacOS, để do thư viện và môi trường khác nên việc cài đặt VE, khởi chạy VE dùng lệnh source bin/activate. Ví dụ: Tôi sử dụng Ubuntu-WSL trên máy của tôi để demo nhé. 0Để ngắt khỏi VE: 1 Chỉ khác nhau về việc khởi chạy và ngắt VE, các action khác như export/import thì trên Windows và Linux/MacOS như nhau. 3.2. Sử dụng IDE Pycharm để khởi tạo VE.Nếu bạn thường xuyên sử dụng Pycharm như một IDE chuyên dụng cho việc code các dự án Python, để bắt đầu mỗi dự án chúng ta đều phải khởi tạo VE trước.Các bạn có thể tham khảo hướng dẫn khá chi tiết về việc này tại trang support của Pycharm: https://www.jetbrains.com/help/pycharm/configuring-local-python-interpreters.html 3.3. Không add/commit/push môi trường lên git.Lưu ý cuối cùng tôi muốn trao đổi với các bạn là đừng bao giờ thực hiện đưa VE lên git/svn vì dung lượng của nó hơi bị ... nặng. Mặc dù trong thư mục VE đã có sẵn file .gitignore nhưng chúng ta vẫn cần lưu ý vấn đề này nhé.Để đồng bộ được các package/framework giữa các môi trường làm việc DEVs/UAT/PRODUCTION, chúng ta chỉ việc export các package trong môi trường ra file requirements.txt và ở môi trường làm việc mới sẽ thực hiện import chúng lại. Kết:Trên đây, tôi đã giới thiệu với các bạn lợi ích và cách sử dụng virtual environments trong lập trình Python chuyên nghiệp. Để đảm bảo tính đầy đủ của bài viết nên bài viết khá dài, hy vọng các bạn nhớ thực hiện setup các VE cho mỗi project để mỗi lần chúng ta "vọc vạch" các thư viện/package mới không làm ảnh hưởng đến những gì đang hoạt động ổn đinh. Cảm ơn các bạn đã đọc bài viết. |