python, pip, virtual environment
Hiểu môi trường chạy của Python và cách lập một môi trường ảo riêng cho mỗi dự án, để cài thư viện không đụng tới hệ thống và dễ dọn dẹp khi cần, dù dùng hệ điều hành nào.
Bài viết này giúp các bạn hiểu rõ hơn về môi trường chạy của python và cách thiết lập, quản lý môi trường ảo (VE) của nó một cách hiệu quả cho dù dùng hệ điều hành nào.
Chỉ cần có python 3 cho dù là phiên bản nào
Đầu tiên bạn phải cài được python. Python 2 cũng được nhưng không còn mấy giá trị gì thời điểm này nên cứ hãy bắt đầu bằng python 3 nha.
Cứ vào đây là xong https://www.python.org/downloads/
Tùy vào thời điểm, như lúc Apple M1 mới vừa ra, việc cài python trên chip M1 hơi vất vả và phải dùng homebrew, mình không bàn ở đây. Miễn sao bạn phải có được python cái đã.
Kiểm tra bằng cách vào command line, gõ python hay python3 xem có chuyện gì xảy ra không. Tôi thường làm trực tiếp trong visual code luôn. Trong VS Code hãy đóng folder đang làm việc nếu có và chọn Terminal, New Terminal. Đây là cái log tôi chạy trên máy MacOS, đoạn ở sau ### là giải thích.
tantran@mbam1 ~ % python --version
zsh: command not found: python ### Dấu hiệu chưa cài python
tantran@mbam1 ~ % python3 --version
Python 3.9.13 ### may quá, có python3
tantran@mbam1 ~ % python3
Python 3.9.13 (main, May 24 2022, 21:13:51)
[Clang 13.1.6 (clang-1316.0.21.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> os.path.dirname(sys.executable)
'/opt/homebrew/opt/python@3.9/bin'. ### python3 được cài vào thư mục này
>>> quit()
tantran@mbam1 ~ %
Điều này cho thấy máy tôi không cài python đầy đủ, ít nhất còn thiếu gói python-is-python3 (lúc đó gọi python sẽ được và ra python3). Tôi cũng cài đặt bằng homebrew chứ không phải cài đặt kiểu bình thường và phiên bản cũng khá cũ. Giờ tháng 8/2022 đã có python 3.10.6 rồi.
Nhưng không quan trọng, chỉ cần có python3 là đủ để bắt đầu rồi.
Tạo môi trường ảo cho python
Cũng trong terminal vừa tạo, tôi sẽ tạo VE rồi bắt đầu cài các thứ cần thiết trong đó luôn.
Tôi sẽ tạo một thư mục làm việc, sau đó tạo môi trường ảo trong đó rồi đổi qua môi trường ảo đó, bắt đầu cài đặt các thư viện cần thiết trong môi trường ảo này. Nó sẽ không ảnh hưởng gì môi trường thật hết, nếu cần tôi chỉ việc thoát ra, xóa môi trường ảo này đi là có thể quên hết âu lo.
Khúc này xem clip nha https://youtu.be/o6VlHHdxYtg
Mình review lại cái terminal log trong clip chút. Đó là sau khi chọn trình thông dịch python xong thì mỗi khi mở terminal ra, VS Code hiểu ý sẽ kích hoạt luôn VE có trong thư mục .venv ở câu lệnh đầu tiên. Sau đó bạn thấy dấu nhắc của mình có (.venv) xuất hiện. Sau đó tự nhiên mình có python và khi kiểm tra thì thấy python lúc này nằm ở thư mục khác.
source /Users/tantran/Desktop/dev/python/playvenv/.venv/bin/activate
tantran@mbam1 playvenv % source /Users/tantran/Desktop/dev/python/playvenv/.venv/bin/activate
(.venv) tantran@mbam1 playvenv % python
Python 3.9.13 (main, May 24 2022, 21:13:51)
[Clang 13.1.6 (clang-1316.0.21.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> os.path.dirname(sys.executable)
'/Users/tantran/Desktop/dev/python/playvenv/.venv/bin'
>>> quit()
(.venv) tantran@mbam1 playvenv %
Điều này đồng nghĩa module venv trong python3 đã clone môi trường thật ra thành môi trường ảo riêng cho bạn và nó tách biệt nên vẫn luôn là 3.9.13.
Quậy được rồi đó
Tôi sẽ upgrade pip lên phiên bản mới 22.2.2 sau đó cài và tạo một dự án django.
Lưu ý nên luôn nâng cấp pip lên mới nhất có thể và bạn cũng sẽ bị nhắc nhiệt tình mỗi lần dùng pip cũ để cài cái gì đó.
Lưu ý tất cả cài đặt này chỉ ảnh hưởng đến môi trường ảo VE, kiểu như ra ngoài bạn gõ django-admin sẽ báo lỗi không có, hay pip bên ngoài vẫn sẽ là version 22.1.1.
source /Users/tantran/Desktop/dev/python/playvenv/.venv/bin/activate
tantran@mbam1 playvenv % source /Users/tantran/Desktop/dev/python/playvenv/.venv/bin/activate
(.venv) tantran@mbam1 playvenv % pip --version
pip 22.1.1 from /Users/tantran/Desktop/dev/python/playvenv/.venv/lib/python3.9/site-packages/pip (python 3.9)
(.venv) tantran@mbam1 playvenv % python -m pip install --upgrade pip
Requirement already satisfied: pip in ./.venv/lib/python3.9/site-packages (22.1.1)
Collecting pip
Using cached pip-22.2.2-py3-none-any.whl (2.0 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.1.1
Uninstalling pip-22.1.1:
Successfully uninstalled pip-22.1.1
Successfully installed pip-22.2.2
(.venv) tantran@mbam1 playvenv % pip install django
Collecting django
Using cached Django-4.1-py3-none-any.whl (8.1 MB)
Collecting asgiref<4,>=3.5.2
Using cached asgiref-3.5.2-py3-none-any.whl (22 kB)
Collecting sqlparse>=0.2.2
Using cached sqlparse-0.4.2-py3-none-any.whl (42 kB)
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.5.2 django-4.1 sqlparse-0.4.2
(.venv) tantran@mbam1 playvenv % django-admin startproject makeaweb .
(.venv) tantran@mbam1 playvenv % ls
makeaweb manage.py
(.venv) tantran@mbam1 playvenv % ls -ah
. .. .venv makeaweb manage.py
(.venv) tantran@mbam1 playvenv %
Trong này chỉ có chú ý là lúc tạo project với django-admin, tôi thêm một dấu . ở cuối để báo tạo code ngay tại thư mục này thay vì tạo thêm một thư mục con, và đó là cách tôi thích hơn chứ không có gì khác.
Gợi ý là nên tạo mỗi project một VE khác nhau để dễ quản lý thư viện, tránh cài đặt dư thừa, lúc đi đâu cũng gọn gàng cho dù cài thẳng lên vps hay đưa vào container…