Virtual Environment là một khái niệm quan trọng đối với những người làm việc với Python, đặc biệt trong các dự án phức tạp.Virtual Environment cung cấp một không gian làm việc riêng biệt, cô lập các thư viện và gói cài đặt giữa các dự án. Để tìm hiểu sâu hơn về khái niệm này, những lợi ích nó mang lại, cùng cách tạo và sử dụng hiệu quả Virtual Environment trong Python, mời bạn tiếp tục theo dõi bài viết sau đây.
Virtual Environment trong Python là gì?
Môi trường ảo – Virtual Environment trong Python là một “bản cài đặt” Python riêng biệt nằm bên trong thư mục của dự án. Với Virtual Environment trong Python, bạn có thể cài đặt và quản lý các gói thư viện (package) Python cho từng dự án khác nhau. Điều này có nghĩa là bạn có thể thoải mái cài đặt các gói, chỉnh sửa môi trường Python của dự án mà không phải lo lắng sẽ làm ảnh hưởng đến các gói đã cài ở môi trường khác.
Virtual Environment trong Python có một số đặc điểm quan trọng:
- Không thể di chuyển hay sao chép: Bạn không nên di chuyển hay sao chép một môi trường ảo từ nơi này sang nơi khác, vì có thể gây ra lỗi.
- Tính dùng một lần (disposable): Môi trường ảo được tạo ra để phục vụ cho một dự án cụ thể, và có thể được xóa đi khi dự án đó không còn cần thiết.
- Chứa một Python interpreter và thư viện cụ thể: Mỗi môi trường ảo sẽ có một phiên bản Python riêng, cùng với các thư viện phần mềm cần thiết cho dự án.
- Nằm trong một thư mục: Virtual Environment trong Python thường được chứa trong một thư mục, thường có tên là venv hoặc .venv, nằm ngay trong thư mục của dự án.
Vì sao lại cần sử dụng Virtual Environment trong Python?
Khi bạn cài đặt Python lên máy tính, phần mềm sẽ được cài ở một vị trí chung và có thể sử dụng ở bất kỳ đâu trên hệ thống. Đó là một cài đặt trên toàn hệ thống.
Trong quá trình phát triển ứng dụng, có thể bạn cần cài đặt một hoặc nhiều thư viện thông qua tiện ích pip (ví dụ, pip3 install some_lib). Hơn nữa, có thể ứng dụng (giả sử là Ứng dụng 1) yêu cầu một phiên bản cụ thể của một thư viện (ví dụ, some_lib 1.0), nhưng một ứng dụng khác (ví dụ Ứng dụng 2) lại cần phiên bản mới hơn của thư viện đó (ví dụ, some_lib 2.0). Nếu cài phiên bản mới hơn thì Ứng dụng 1 có thể sẽ không chạy được do sự xung đột giữa hai phiên bản khác nhau của cùng một thư viện.
Để giải quyết vấn đề này, Virtual Environment trong Python sẽ cung cấp cho bạn những môi trường Python hoàn toàn riêng biệt. Như đã nói ở trên, mỗi môi trường ảo là một thư mục chứa một bản sao của trình thông dịch Python, các thư viện chuẩn, và các mô-đun khác. Nhờ vậy, các ứng dụng khác nhau có thể dùng các phiên bản thư viện khác nhau mà không sợ xung đột.
Hình ảnh dưới đây minh họa lợi ích của việc sử dụng môi trường ảo: Bạn có thể tạo nhiều môi trường ảo khác nhau từ cùng một cài đặt Python gốc, và mỗi Virtual Environment trong Python sẽ dùng các phiên bản khác nhau của cùng một thư viện để tránh xung đột.
Tạo Virtual Environment trong Python bằng venv
Python cung cấp một module chuẩn có tên venv để hỗ trợ việc tạo Virtual Environment trong Python. Tính năng này giúp bạn có thể quản lý các thư viện và gói (package) của từng dự án một cách độc lập, tránh xung đột phiên bản. Để tạo một môi trường ảo mới, bạn hãy làm theo các bước dưới đây:
Trước tiên, hãy tạo một thư mục để chứa dự án và môi trường ảo:
C:\Users\Acer>md\pythonapp
C:\Users\Acer>cd\pythonapp
Sau đó, bạn sẽ sử dụng lệnh python -m venv myvenv để tạo một môi trường ảo trong thư mục myvenv vừa tạo:
C:\pythonapp>python -m venv myvenv
Trong đó, myvenv là tên thư mục bạn muốn đặt cho môi trường ảo. Bạn có thể tùy ý đặt tên này theo ý của bạn. Sau khi thực hiện các lệnh trên, cấu trúc thư mục của bạn sẽ như sau:
Directory of C:\pythonapp\myvenv
05-05-2024 10:00 <DIR> .
05-05-2024 10:00 <DIR> ..
05-05-2024 10:00 <DIR> Include
05-05-2024 10:00 <DIR> Lib
05-05-2024 10:00 77 pyvenv.cfg
05-05-2024 10:00 <DIR> Scripts
Bạn sẽ thấy một thư mục con có tên Scripts trong thư mục môi trường ảo này. Thư mục Scripts này chứa các tiện ích (utilities) để kích hoạt (activate) và hủy kích hoạt (deactivate) môi trường ảo, cũng như bản sao của trình thông dịch Python (Python interpreter) cục bộ dành cho môi trường này. Chi tiết các file bên trong thư mục Scripts sẽ có dạng như sau:
Directory of C:\pythonapp\myvenv\scripts
05-05-2024 10:00 <DIR> .
05-05-2024 10:00 <DIR> ..
05-05-2024 10:00 2,063 activate
05-05-2024 10:00 992 activate.bat
05-05-2024 10:00 19,611 Activate.ps1
05-05-2024 10:00 393 deactivate.bat
05-05-2024 10:00 106,349 pip.exe
05-05-2024 10:00 106,349 pip3.10.exe
05-05-2024 10:00 106,349 pip3.exe
05-05-2024 10:00 242,408 python.exe
05-05-2024 10:00 232,688 pythonw.exe
Diễn giải chi tiết:
venv
: Là một module tích hợp sẵn trong Python, giúp tạo Virtual Environment trong Python.Virtual Environment
: Là một không gian làm việc độc lập, có bộ cài đặt Python và các thư viện riêng biệt. Môi trường ảo giúp các dự án không bị ảnh hưởng bởi thư viện của các dự án khác.md\pythonapp
vàcd\pythonapp
: Các lệnh này để tạo thư mụcpythonapp
và chuyển vào trong thư mục đó.python -m venv myvenv
: Lệnh này sử dụng modulevenv
để tạo một môi trường ảo có tênmyvenv
trong thư mục hiện tại.-m
có nghĩa là chạy một module.- Thư mục Include: Thư mục này thường chứa các file tiêu đề (header file) C khi cài các package mở rộng (nếu có).
- Thư mục Lib: Nơi lưu các thư viện của Virtual Environment trong Python.
- File
pyvenv.cfg
: File cấu hình môi trường ảo. - Thư mục Scripts (hoặc bin trên MacOS và Linux): Nơi chứa các file thực thi để kích hoạt/hủy môi trường ảo (ví dụ:
activate
,deactivate
) và bản sao Python interpreter cục bộ. activate
: Các file có tên này để kích hoạt môi trường ảo. Có các phiên bản khác nhau cho các hệ điều hành khác nhau.deactivate.bat
: File để tắt môi trường ảo.pip.exe
,pip3.exe
…: Các file thực thi của trình quản lý góipip
để cài đặt thư viện.python.exe
,pythonw.exe
: Các file thực thi của trình thông dịch Python trong môi trường ảo.
Kích hoạt Virtual Environment trong Python
Để sử dụng môi trường ảo vừa tạo, bạn cần kích hoạt nó. Trong Windows, bạn có thể thực hiện bằng cách chạy file activate.bat nằm trong thư mục Scripts của môi trường ảo đó.
Ví dụ: Nếu bạn đang ở thư mục C:\pythonapp, bạn sẽ dùng lệnh sau để kích hoạt môi trường ảo có tên myvenv:
C:\pythonapp> myvenv\Scripts\activate
Sau khi chạy lệnh trên, bạn sẽ thấy dấu nhắc lệnh thay đổi, có thêm tên của Virtual Environment được đặt trong dấu ngoặc đơn. Ví dụ:
(myvenv) C:\pythonapp>
Lưu ý: Tên môi trường ảo ở đây là myvenv, có thể khác tùy theo tên bạn đã đặt.
Thư mục Scripts chứa bản sao cục bộ của trình thông dịch Python. Khi Virtual Environment được kích hoạt, mọi lệnh Python bạn thực thi sẽ được chạy bằng phiên bản Python này, cô lập với các môi trường khác. Lúc này, bạn có thể bắt đầu một phiên làm việc Python ngay trong môi trường ảo đã tạo.
Cách kiểm tra Python đang chạy trong Virtual Environment
Để xác nhận phiên Python hiện tại có đang chạy trong môi trường ảo hay không, bạn có thể kiểm tra danh sách các đường dẫn (path) trong sys.path. Ví dụ, khi bạn kích hoạt một môi trường ảo có tên là myvenv và chạy Python, kết quả kiểm tra sys.path có thể sẽ giống như sau:
(myvenv) C:\pythonapp>python
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929
64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\Python310\\python310.zip', 'C:\\Python310\\DLLs',
'C:\\Python310\\lib', 'C:\\Python310', 'C:\\pythonapp\\myvenv',
'C:\\pythonapp\\myvenv\\lib\\site-packages']
>>>
Lưu ý: Để tắt môi trường ảo này, bạn chạy lệnh deactivate.bat.
Bạn có thể thấy rằng đường dẫn đến thư mục môi trường ảo (C:\\pythonapp\\myvenv và C:\\pythonapp\\myvenv\\lib\\site-packages) được thêm vào danh sách các đường dẫn tìm kiếm của Python.
Thư mục scripts của môi trường ảo này cũng chứa các tiện ích pip. Khi bạn cài đặt một gói thư viện từ PyPI, gói thư viện đó sẽ chỉ hoạt động trong môi trường ảo hiện tại mà thôi.
Lời kết
Chúng ta vừa cùng nhau khám phá về Virtual Environment trong Python, từ khái niệm cơ bản đến cách tạo và sử dụng. Hy vọng qua bài viết này, bạn đã hiểu rõ tầm quan trọng của việc sử dụng môi trường ảo để quản lý dự án Python hiệu quả hơn, tránh xung đột thư viện và duy trì tính nhất quán.