From e86ef5e57d17be4e868b495102961b59844bd879 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Ph=C6=B0=C6=A1ng=20T=E1=BA=A5n=20Th=C3=A0nh?=
<51350651+ptt3199@users.noreply.github.com>
Date: Sat, 8 Feb 2025 05:19:18 +0700
Subject: [PATCH] =?utf8?q?=F0=9F=8C=90=20Add=20Vietnamese=20translation=20?=
=?utf8?q?for=20`docs/vi/docs/virtual-environments.md`=20(#13282)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
---
docs/vi/docs/virtual-environments.md | 842 +++++++++++++++++++++++++++
1 file changed, 842 insertions(+)
create mode 100644 docs/vi/docs/virtual-environments.md
diff --git a/docs/vi/docs/virtual-environments.md b/docs/vi/docs/virtual-environments.md
new file mode 100644
index 0000000000..22d8e153e5
--- /dev/null
+++ b/docs/vi/docs/virtual-environments.md
@@ -0,0 +1,842 @@
+# Môi trưá»ng ảo (Virtual Environments)
+
+Khi bạn là m viá»c trong các dá»± án Python, bạn có thá» sá» dụng má»t **môi trưá»ng ảo** (hoặc má»t cÆ¡ chế tương tá»±) Äá» cách ly các gói bạn cà i Äặt cho má»i dá»± án.
+
+/// info
+Nếu bạn Äã biết vá» các môi trưá»ng ảo, cách tạo chúng và sá» dụng chúng, bạn có thá» bá» qua phần nà y. ð¤
+
+///
+
+/// tip
+
+Má»t **môi trưá»ng ảo** khác vá»i má»t **biến môi trưá»ng (environment variable)**.
+
+Má»t **biến môi trưá»ng** là má»t biến trong há» thá»ng có thá» ÄÆ°á»£c sá» dụng bá»i các chương trình.
+
+Má»t **môi trưá»ng ảo** là má»t thư mục vá»i má»t sá» tá»p trong Äó.
+
+///
+
+/// info
+
+Trang nà y sẽ hưá»ng dẫn bạn cách sá» dụng các **môi trưá»ng ảo** và cách chúng hoạt Äá»ng.
+
+Nếu bạn Äã sẵn sà ng sá» dụng má»t **công cụ có thá» quản lý tất cả má»i thứ** cho bạn (bao gá»m cả viá»c cà i Äặt Python), hãy thá» uv.
+
+///
+
+## Tạo má»t Dá»± án
+
+Äầu tiên, tạo má»t thư mục cho dá»± án cá»§a bạn.
+
+Cách tôi thưá»ng là m là tạo má»t thư mục có tên `code` trong thư mục `home/user`.
+
+Và trong thư mục Äó, tôi tạo má»t thư mục cho má»i dá»± án.
+
+
+
+```console
+// Äi Äến thư mục home
+$ cd
+// Tạo má»t thư mục cho tất cả các dá»± án cá»§a bạn
+$ mkdir code
+// Và o thư mục code
+$ cd code
+// Tạo má»t thư mục cho dá»± án nà y
+$ mkdir awesome-project
+// Và o thư mục dự án
+$ cd awesome-project
+```
+
+
+
+## Tạo má»t Môi trưá»ng ảo
+
+Khi bạn bắt Äầu là m viá»c vá»i má»t dá»± án Python **trong lần Äầu**, hãy tạo má»t môi trưá»ng ảo **trong thư mục dá»± án cá»§a bạn**.
+
+/// tip
+
+Bạn cần là m Äiá»u nà y **má»t lần cho má»i dá»± án**, không phải má»i khi bạn là m viá»c.
+///
+
+//// tab | `venv`
+
+Äá» tạo má»t môi trưá»ng ảo, bạn có thá» sá» dụng module `venv` có sẵn cá»§a Python.
+
+
+
+```console
+$ python -m venv .venv
+```
+
+
+
+/// details | Cách các lá»nh hoạt Äá»ng
+
+* `python`: sỠdụng chương trình `python`
+* `-m`: gá»i má»t module như má»t script, chúng ta sẽ nói vá» module Äó sau
+* `venv`: sá» dụng module `venv` ÄÆ°á»£c cà i Äặt sẵn cá»§a Python
+* `.venv`: tạo môi trưá»ng ảo trong thư mục má»i `.venv`
+
+///
+
+////
+
+//// tab | `uv`
+
+Nếu bạn có `uv` ÄÆ°á»£c cà i Äặt, bạn có thá» sá» dụng nó Äá» tạo má»t môi trưá»ng ảo.
+
+
+
+```console
+$ uv venv
+```
+
+
+
+/// tip
+
+Mặc Äá»nh, `uv` sẽ tạo má»t môi trưá»ng ảo trong má»t thư mục có tên `.venv`.
+
+Nhưng bạn có thá» tùy chá»nh nó bằng cách thêm má»t Äá»i sá» vá»i tên thư mục.
+
+///
+
+////
+
+Lá»nh nà y tạo má»t môi trưá»ng ảo má»i trong má»t thư mục có tên `.venv`.
+
+/// details | `.venv` hoặc tên khác
+
+Bạn có thá» tạo môi trưá»ng ảo trong má»t thư mục khác, nhưng thưá»ng ngưá»i ta quy ưá»c Äặt nó là `.venv`.
+
+///
+
+## KÃch hoạt Môi trưá»ng ảo
+
+KÃch hoạt môi trưá»ng ảo má»i Äá» bất kỳ lá»nh Python nà o bạn chạy hoặc gói nà o bạn cà i Äặt sẽ sá» dụng nó.
+
+/// tip
+
+Là m Äiá»u nà y **má»i khi** bạn bắt Äầu má»t **phiên terminal má»i** Äá» là m viá»c trên dá»± án.
+
+///
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+Nếu bạn sỠdụng Bash cho Windows (và dụ: Git Bash):
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+/// tip
+
+Má»i khi bạn cà i Äặt thêm má»t **package má»i** trong môi trưá»ng Äó, hãy **kÃch hoạt** môi trưá»ng Äó lại.
+
+Äiá»u nà y Äảm bảo rằng khi bạn sá» dụng má»t **chương trình dòng lá»nh (CLI)** ÄÆ°á»£c cà i Äặt từ gói Äó, bạn sẽ dùng bản cà i Äặt từ môi trưá»ng ảo cá»§a mình thay vì bản ÄÆ°á»£c cà i Äặt toà n cục khác có thá» có phiên bản khác vá»i phiên bản bạn cần.
+
+///
+
+## Kiá»m tra xem Môi trưá»ng ảo Äã ÄÆ°á»£c KÃch hoạt chưa
+
+Kiá»m tra xem môi trưá»ng ảo Äã ÄÆ°á»£c kÃch hoạt chưa (lá»nh trưá»c Äó Äã hoạt Äá»ng).
+
+/// tip
+
+Äiá»u nà y là **không bắt buá»c**, nhưng nó là má»t cách tá»t Äá» **kiá»m tra** rằng má»i thứ Äang hoạt Äá»ng như mong Äợi và bạn Äang sá» dụng Äúng môi trưá»ng ảo mà bạn Äã Äá»nh.
+
+///
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+Nếu nó hiá»n thá» `python` binary tại `.venv/bin/python`, trong dá»± án cá»§a bạn (trong trưá»ng hợp `awesome-project`), thì tức là nó hoạt Äá»ng. ð
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+Nếu nó hiá»n thá» `python` binary tại `.venv\Scripts\python`, trong dá»± án cá»§a bạn (trong trưá»ng hợp `awesome-project`), thì tức là nó hoạt Äá»ng. ð
+
+////
+
+## Nâng cấp `pip`
+
+/// tip
+
+Nếu bạn sá» dụng `uv` bạn sá» dụng nó Äá» cà i Äặt thay vì `pip`, thì bạn không cần cáºp nháºt `pip`. ð
+
+///
+
+Nếu bạn sá» dụng `pip` Äá» cà i Äặt gói (nó ÄÆ°á»£c cà i Äặt mặc Äá»nh vá»i Python), bạn nên **nâng cấp** nó lên phiên bản má»i nhất.
+
+Nhiá»u lá»i khác nhau trong khi cà i Äặt gói ÄÆ°á»£c giải quyết chá» bằng cách nâng cấp `pip` trưá»c.
+
+/// tip
+
+Bạn thưá»ng là m Äiá»u nà y **má»t lần**, ngay sau khi bạn tạo môi trưá»ng ảo.
+
+///
+
+Äảm bảo rằng môi trưá»ng ảo Äã ÄÆ°á»£c kÃch hoạt (vá»i lá»nh trên) và sau Äó chạy:
+
+
+
+```console
+$ python -m pip install --upgrade pip
+
+---> 100%
+```
+
+
+
+## Thêm `.gitignore`
+
+Nếu bạn sá» dụng **Git** (nên là m), hãy thêm má»t file `.gitignore` Äá» Git bá» qua má»i thứ trong `.venv`.
+
+/// tip
+
+Nếu bạn sá» dụng `uv` Äá» tạo môi trưá»ng ảo, nó Äã tá»± Äá»ng là m Äiá»u nà y cho bạn, bạn có thá» bá» qua bưá»c nà y. ð
+
+///
+
+/// tip
+
+Là m Äiá»u nà y **má»t lần**, ngay sau khi bạn tạo môi trưá»ng ảo.
+
+///
+
+
+
+```console
+$ echo "*" > .venv/.gitignore
+```
+
+
+
+/// details | Cách lá»nh hoạt Äá»ng
+
+* `echo "*"`: sẽ "in" vÄn bản `*` trong terminal (phần tiếp theo sẽ thay Äá»i Äiá»u Äó má»t chút)
+* `>`: bất kỳ vÄn bản nà o ÄÆ°á»£c in ra terminal bá»i lá»nh trưá»c `>` không ÄÆ°á»£c in ra mà thay và o Äó ÄÆ°á»£c viết và o file á» phÃa bên phải cá»§a `>`
+* `.gitignore`: tên cá»§a file mà vÄn bản sẽ ÄÆ°á»£c viết và o
+
+Và `*` vá»i Git có nghÄ©a là "má»i thứ". Vì váºy, nó sẽ bá» qua má»i thứ trong thư mục `.venv`.
+
+Lá»nh nà y sẽ tạo má»t file `.gitignore` vá»i ná»i dung:
+
+```gitignore
+*
+```
+
+///
+
+## Cà i Äặt gói (packages)
+
+Sau khi kÃch hoạt môi trưá»ng, bạn có thá» cà i Äặt các gói trong Äó.
+
+/// tip
+
+Thá»±c hiá»n Äiá»u nà y **má»t lần** khi cà i Äặt hoặc cáºp nháºt gói cần thiết cho dá»± án cá»§a bạn.
+
+Nếu bạn cần cáºp nháºt phiên bản hoặc thêm má»t gói má»i, bạn sẽ **thá»±c hiá»n Äiá»u nà y lại**.
+
+///
+
+### Cà i Äặt gói trá»±c tiếp
+
+Nếu bạn cần cáºp nháºt phiên bản hoặc thêm má»t gói má»i, bạn sẽ **thá»±c hiá»n Äiá»u nà y lại**.
+
+/// tip
+Äá» quản lý dá»± án tá»t hÆ¡n, hãy liá»t kê tất cả các gói và phiên bản cần thiết trong má»t file (và dụ `requirements.txt` hoặc `pyproject.toml`).
+
+///
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install "fastapi[standard]"
+
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+Nếu bạn có `uv`:
+
+
+
+```console
+$ uv pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+////
+
+### Cà i Äặt từ `requirements.txt`
+
+Nếu bạn có má»t tá»p `requirements.txt`, bạn có thá» sá» dụng nó Äá» cà i Äặt các gói.
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+Nếu bạn có `uv`:
+
+
+
+```console
+$ uv pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+/// details | `requirements.txt`
+
+Má»t tá»p `requirements.txt` vá»i má»t sá» gói sẽ trông như thế nà y:
+
+```requirements.txt
+fastapi[standard]==0.113.0
+pydantic==2.8.0
+```
+
+///
+
+## Chạy Chương trình của bạn
+
+Sau khi kÃch hoạt môi trưá»ng ảo, bạn có thá» chạy chương trình cá»§a mình, nó sẽ sá» dụng Python trong môi trưá»ng ảo cá»§a bạn vá»i các gói bạn Äã cà i Äặt.
+
+
+
+```console
+$ python main.py
+
+Hello World
+```
+
+
+
+## Cấu hình Trình soạn thảo của bạn
+
+Nếu bạn sá» dụng má»t trình soạn thảo, hãy Äảm bảo bạn cấu hình nó Äá» sá» dụng cùng môi trưá»ng ảo mà bạn Äã tạo (trình soạn thảo sẽ tá»± Äá»ng phát hiá»n môi trưá»ng ảo) Äá» bạn có thá» nháºn ÄÆ°á»£c tÃnh nÄng tá»± Äá»ng hoà n thà nh câu lá»nh (autocomplete) và in lá»i trá»±c tiếp trong trình soạn thảo (inline errors).
+
+Và dụ:
+
+* VS Code
+* PyCharm
+
+/// tip
+
+Bạn thưá»ng chá» cần là m Äiá»u nà y **má»t lần**, khi bạn tạo môi trưá»ng ảo.
+
+///
+
+## Huá»· kÃch hoạt Môi trưá»ng ảo
+
+Khi bạn hoà n tất viá»c là m trên dá»± án cá»§a bạn, bạn có thá» **huá»· kÃch hoạt** môi trưá»ng ảo.
+
+
+
+```console
+$ deactivate
+```
+
+
+
+Như váºy, khi bạn chạy `python`, nó sẽ không chạy từ môi trưá»ng ảo Äó vá»i các gói Äã cà i Äặt.
+
+## Sẵn sà ng Äá» Là m viá»c
+
+Bây giá» bạn Äã sẵn sà ng Äá» là m viá»c trên dá»± án cá»§a mình rá»i Äấy.
+
+/// tip
+
+Bạn muá»n hiá»u tất cả những gì á» trên?
+
+Tiếp tục Äá»c. ðð¤
+
+///
+
+## Tại sao cần Môi trưá»ng ảo
+
+Äá» là m viá»c vá»i FastAPI, bạn cần cà i Äặt Python.
+
+Sau Äó, bạn sẽ cần **cà i Äặt** FastAPI và bất kỳ **gói** nà o mà bạn muá»n sá» dụng.
+
+Äá» cà i Äặt gói, bạn thưá»ng sá» dụng lá»nh `pip` có sẵn vá»i Python (hoặc các phiên bản tương tá»±).
+
+Tuy nhiên, nếu bạn sá» dụng `pip` trá»±c tiếp, các gói sẽ ÄÆ°á»£c cà i Äặt trong **môi trưá»ng Python toà n cục** cá»§a bạn (phần cà i Äặt toà n cục cá»§a Python).
+
+### Vấn Äá»
+
+Váºy, vấn Äá» gì khi cà i Äặt gói trong môi trưá»ng Python toà n cục?
+
+Trong má»t và i thá»i Äiá»m, bạn sẽ phải viết nhiá»u chương trình khác nhau phụ thuá»c và o **các gói khác nhau**. Và má»t sá» dá»± án bạn thá»±c hiá»n lại phụ thuá»c và o **các phiên bản khác nhau** cá»§a cùng má»t gói. ð±
+
+Và dụ, bạn có thá» tạo má»t dá»± án ÄÆ°á»£c gá»i là `philosophers-stone`, chương trình nà y phụ thuá»c và o má»t gói khác ÄÆ°á»£c gá»i là **`harry`, sá» dụng phiên bản `1`**. Vì váºy, bạn cần cà i Äặt `harry`.
+
+```mermaid
+flowchart LR
+ stone(philosophers-stone) -->|phụ thuá»c| harry-1[harry v1]
+```
+
+Sau Äó, và o má»t và i thá»i Äiá»m sau, bạn tạo má»t dá»± án khác ÄÆ°á»£c gá»i là `prisoner-of-azkaban`, và dá»± án nà y cÅ©ng phụ thuá»c và o `harry`, nhưng dá»± án nà y cần **`harry` phiên bản `3`**.
+
+```mermaid
+flowchart LR
+ azkaban(prisoner-of-azkaban) --> |phụ thuá»c| harry-3[harry v3]
+```
+
+Bây giá», vấn Äá» là , nếu bạn cà i Äặt các gói toà n cục (trong môi trưá»ng toà n cục) thay vì trong má»t **môi trưá»ng ảo cục bá»**, bạn sẽ phải chá»n phiên bản `harry` nà o Äá» cà i Äặt.
+
+Nếu bạn muá»n chạy `philosophers-stone` bạn sẽ cần phải cà i Äặt `harry` phiên bản `1`, và dụ vá»i:
+
+
+
+```console
+$ pip install "harry==1"
+```
+
+
+
+Và sau Äó bạn sẽ có `harry` phiên bản `1` ÄÆ°á»£c cà i Äặt trong môi trưá»ng Python toà n cục cá»§a bạn.
+
+```mermaid
+flowchart LR
+ subgraph global[môi trưá»ng toà n cục]
+ harry-1[harry v1]
+ end
+ subgraph stone-project[dự án philosophers-stone ]
+ stone(philosophers-stone) -->|phụ thuá»c| harry-1
+ end
+```
+
+Nhưng sau Äó, nếu bạn muá»n chạy `prisoner-of-azkaban`, bạn sẽ cần phải gỡ bá» `harry` phiên bản `1` và cà i Äặt `harry` phiên bản `3` (hoặc chá» cần cà i Äặt phiên bản `3` sẽ tá»± Äá»ng gỡ bá» phiên bản `1`).
+
+
+
+```console
+$ pip install "harry==3"
+```
+
+
+
+Và sau Äó bạn sẽ có `harry` phiên bản `3` ÄÆ°á»£c cà i Äặt trong môi trưá»ng Python toà n cục cá»§a bạn.
+
+Và nếu bạn cá» gắng chạy `philosophers-stone` lại, có khả nÄng nó sẽ **không hoạt Äá»ng** vì nó cần `harry` phiên bản `1`.
+
+```mermaid
+flowchart LR
+ subgraph global[môi trưá»ng toà n cục]
+ harry-1[harry v1]
+ style harry-1 fill:#ccc,stroke-dasharray: 5 5
+ harry-3[harry v3]
+ end
+ subgraph stone-project[dự án philosophers-stone ]
+ stone(philosophers-stone) -.-x|âï¸| harry-1
+ end
+ subgraph azkaban-project[dự án prisoner-of-azkaban ]
+ azkaban(prisoner-of-azkaban) --> |phụ thuá»c| harry-3
+ end
+```
+
+/// tip
+
+Mặc dù các gói Python thưá»ng cá» gắng **tránh các thay Äá»i là m há»ng code** trong **phiên bản má»i**, nhưng Äá» Äảm bảo an toà n, bạn nên chá»§ Äá»ng cà i Äặt phiên bản má»i và chạy kiá»m thá» Äá» xác nháºn má»i thứ vẫn hoạt Äá»ng Äúng.
+
+///
+
+Bây giá», hãy hình dung vá» **nhiá»u** gói khác nhau mà tất cả các dá»± án cá»§a bạn phụ thuá»c và o. Rõ rà ng rất khó Äá» quản lý. Äiá»u nà y dẫn tá»i viá»c là bạn sẽ có nhiá»u dá»± án vá»i **các phiên bản không tương thÃch** cá»§a các gói, và bạn có thá» không biết tại sao má»t sá» thứ không hoạt Äá»ng.
+
+HÆ¡n nữa, tuỳ và o há» Äiá»u hà nh cá»§a bạn (vd Linux, Windows, macOS), có thá» Äã có Python ÄÆ°á»£c cà i Äặt sẵn. Trong trưá»ng hợp ấy, má»t và i gói nhiá»u khả nÄng Äã ÄÆ°á»£c cà i Äặt trưá»c vá»i các phiên bản **cần thiết cho há» thá»ng cá»§a bạn**. Nếu bạn cà i Äặt các gói trong môi trưá»ng Python toà n cục, bạn có thá» sẽ **phá vỡ** má»t sá» chương trình Äã ÄÆ°á»£c cà i Äặt sẵn cùng há» thá»ng.
+
+## NÆ¡i các Gói ÄÆ°á»£c Cà i Äặt
+
+Khi bạn cà i Äặt Python, nó sẽ tạo ra má»t và i thư mục và tá»p trong máy tÃnh cá»§a bạn.
+
+Má»t và i thư mục nà y là những thư mục chá»u trách nhiá»m có tất cả các gói bạn cà i Äặt.
+
+Khi bạn chạy:
+
+
+
+```console
+// Äừng chạy lá»nh nà y ngay, Äây chá» là má»t và dụ ð¤
+$ pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+Lá»nh nà y sẽ tải xuá»ng má»t tá»p nén vá»i mã nguá»n FastAPI, thưá»ng là từ PyPI.
+
+Nó cÅ©ng sẽ **tải xuá»ng** các tá»p cho các gói khác mà FastAPI phụ thuá»c và o.
+
+Sau Äó, nó sẽ **giải nén** tất cả các tá»p Äó vÃ ÄÆ°a chúng và o má»t thư mục trong máy tÃnh cá»§a bạn.
+
+Mặc Äá»nh, nó sẽ ÄÆ°a các tá»p Äã tải xuá»ng và giải nén và o thư mục ÄÆ°á»£c cà i Äặt cùng Python cá»§a bạn, Äó là **môi trưá»ng toà n cục**.
+
+## Những Môi trưá»ng ảo là gì?
+
+Cách giải quyết cho vấn Äá» có tất cả các gói trong môi trưá»ng toà n cục là sá» dụng má»t **môi trưá»ng ảo cho má»i dá»± án** bạn là m viá»c.
+
+Má»t môi trưá»ng ảo là má»t **thư mục**, rất giá»ng vá»i môi trưá»ng toà n cục, trong Äó bạn có thá» cà i Äặt các gói cho má»t dá»± án.
+
+Vì váºy, má»i dá»± án sẽ có má»t môi trưá»ng ảo riêng cá»§a nó (thư mục `.venv`) vá»i các gói riêng cá»§a nó.
+
+```mermaid
+flowchart TB
+ subgraph stone-project[dự án philosophers-stone ]
+ stone(philosophers-stone) --->|phụ thuá»c| harry-1
+ subgraph venv1[.venv]
+ harry-1[harry v1]
+ end
+ end
+ subgraph azkaban-project[dự án prisoner-of-azkaban ]
+ azkaban(prisoner-of-azkaban) --->|phụ thuá»c| harry-3
+ subgraph venv2[.venv]
+ harry-3[harry v3]
+ end
+ end
+ stone-project ~~~ azkaban-project
+```
+
+## KÃch hoạt Môi trưá»ng ảo nghÄ©a là gì
+
+Khi bạn kÃch hoạt má»t môi trưá»ng ảo, và dụ vá»i:
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+Nếu bạn sỠdụng Bash cho Windows (và dụ Git Bash):
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+Lá»nh nà y sẽ tạo hoặc sá»a Äá»i má»t sá» [biến môi trưá»ng](environment-variables.md){.internal-link target=_blank} mà sẽ ÄÆ°á»£c sá» dụng cho các lá»nh tiếp theo.
+
+Má»t trong sá» Äó là biến `PATH`.
+
+/// tip
+
+Bạn có thá» tìm hiá»u thêm vá» biến `PATH` trong [Biến môi trưá»ng](environment-variables.md#path-environment-variable){.internal-link target=_blank} section.
+
+///
+
+KÃch hoạt môi trưá»ng ảo thêm ÄÆ°á»ng dẫn `.venv/bin` (trên Linux và macOS) hoặc `.venv\Scripts` (trên Windows) và o biến `PATH`.
+
+Giả sá» rằng trưá»c khi kÃch hoạt môi trưá»ng, biến `PATH` như sau:
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+NghÄ©a là há» thá»ng sẽ tìm kiếm chương trình trong:
+
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Windows\System32
+```
+
+NghÄ©a là há» thá»ng sẽ tìm kiếm chương trình trong:
+
+* `C:\Windows\System32`
+
+////
+
+Sau khi kÃch hoạt môi trưá»ng ảo, biến `PATH` sẽ như sau:
+
+//// tab | Linux, macOS
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+NghÄ©a là há» thá»ng sẽ bắt Äầu tìm kiếm chương trình trong:
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin
+```
+
+trưá»c khi tìm kiếm trong các thư mục khác.
+
+Vì váºy, khi bạn gõ `python` trong terminal, há» thá»ng sẽ tìm thấy chương trình Python trong:
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+và sá» dụng chương trình Äó.
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
+```
+
+NghÄ©a là há» thá»ng sẽ bắt Äầu tìm kiếm chương trình trong:
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts
+```
+
+trưá»c khi tìm kiếm trong các thư mục khác.
+
+Vì váºy, khi bạn gõ `python` trong terminal, há» thá»ng sẽ tìm thấy chương trình Python trong:
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+và sá» dụng chương trình Äó.
+
+////
+
+Má»t chi tiết quan trá»ng là nó sẽ ÄÆ°a Äá»a chá» cá»§a môi trưá»ng ảo và o **Äầu** cá»§a biến `PATH`. Há» thá»ng sẽ tìm kiếm nó **trưá»c** khi tìm kiếm bất kỳ Python nà o khác có sẵn. Vì váºy, khi bạn chạy `python`, nó sẽ sá» dụng Python **từ môi trưá»ng ảo** thay vì bất kỳ Python nà o khác (và dụ, Python từ môi trưá»ng toà n cục).
+
+KÃch hoạt má»t môi trưá»ng ảo cÅ©ng thay Äá»i má»t và i thứ khác, nhưng Äây là má»t trong những Äiá»u quan trá»ng nhất mà nó thá»±c hiá»n.
+
+## Kiá»m tra má»t Môi trưá»ng ảo
+
+Khi bạn kiá»m tra má»t môi trưá»ng ảo Äã ÄÆ°á»£c kÃch hoạt chưa, và dụ vá»i:
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+////
+
+
+Äiá»u Äó có nghÄ©a là chương trình `python` sẽ ÄÆ°á»£c sá» dụng là chương trình **trong môi trưá»ng ảo**.
+
+Bạn sỠdụng `which` trên Linux và macOS và `Get-Command` trên Windows PowerShell.
+
+Cách hoạt Äá»ng cá»§a lá»nh nà y là nó sẽ Äi và kiá»m tra biến `PATH`, Äi qua **má»i ÄÆ°á»ng dẫn theo thứ tá»±**, tìm kiếm chương trình ÄÆ°á»£c gá»i là `python`. Khi nó tìm thấy nó, nó sẽ **hiá»n thá» cho bạn ÄÆ°á»ng dẫn** Äến chương trình Äó.
+
+Äiá»u quan trá»ng nhất là khi bạn gá»i `python`, Äó chÃnh là chương trình `python` ÄÆ°á»£c thá»±c thi.
+
+Vì váºy, bạn có thá» xác nháºn nếu bạn Äang á» trong môi trưá»ng ảo Äúng.
+
+/// tip
+
+Dá»
dà ng kÃch hoạt má»t môi trưá»ng ảo, cà i Äặt Python, và sau Äó **chuyá»n Äến má»t dá»± án khác**.
+
+Và dá»± án thứ hai **sẽ không hoạt Äá»ng** vì bạn Äang sá» dụng **Python không Äúng**, từ má»t môi trưá»ng ảo cho má»t dá»± án khác.
+
+Tháºt tiá»n lợi khi có thá» kiá»m tra `python` nà o Äang ÄÆ°á»£c sá» dụng ð¤
+
+///
+
+## Tại sao lại Huá»· kÃch hoạt má»t Môi trưá»ng ảo
+
+Và dụ, bạn có thá» là m viá»c trên má»t dá»± án `philosophers-stone`, **kÃch hoạt môi trưá»ng ảo**, cà i Äặt các gói và là m viá»c vá»i môi trưá»ng ảo Äó.
+
+Sau Äó, bạn muá»n là m viá»c trên **dá»± án khác** `prisoner-of-azkaban`.
+
+Bạn Äi Äến dá»± án Äó:
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+```
+
+
+
+Nếu bạn không tắt môi trưá»ng ảo cho `philosophers-stone`, khi bạn chạy `python` trong terminal, nó sẽ cá» gắng sá» dụng Python từ `philosophers-stone`.
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+$ python main.py
+
+// Lá»i khi import sirius, nó không ÄÆ°á»£c cà i Äặt ð±
+Traceback (most recent call last):
+ File "main.py", line 1, in
+ import sirius
+```
+
+
+
+Nếu bạn huá»· kÃch hoạt môi trưá»ng ảo hiá»n tại và kÃch hoạt môi trưá»ng ảo má»i cho `prisoner-of-azkaban`, khi bạn chạy `python`, nó sẽ sá» dụng Python từ môi trưá»ng ảo trong `prisoner-of-azkaban`.
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+// Bạn không cần phải á» trong thư mục trưá»c Äá» huá»· kÃch hoạt, bạn có thá» là m Äiá»u Äó á» bất kỳ Äâu, ngay cả sau khi Äi Äến dá»± án khác ð
+$ deactivate
+
+// KÃch hoạt môi trưá»ng ảo trong prisoner-of-azkaban/.venv ð
+$ source .venv/bin/activate
+
+// Bây giá» khi bạn chạy python, nó sẽ tìm thấy gói sirius ÄÆ°á»£c cà i Äặt trong môi trưá»ng ảo nà y â¨
+$ python main.py
+
+I solemnly swear ðº
+
+(Tôi long trá»ng thá» ðº - câu nà y ÄÆ°á»£c lấy từ Harry Potter, chú thÃch cá»§a ngưá»i dá»ch)
+```
+
+
+
+## Các cách là m tương tự
+
+Äây là má»t hưá»ng dẫn ÄÆ¡n giản Äá» bạn có thá» bắt Äầu và hiá»u cách má»i thứ hoạt Äá»ng **bên trong**.
+
+Có nhiá»u **cách khác nhau** Äá» quản là các môi trưá»ng ảo, các gói phụ thuá»c (requirements), và các dá»± án.
+
+Má»t khi bạn Äã sẵn sà ng và muá»n sá» dụng má»t công cụ Äá» **quản là cả dá»± án**, các gói phụ thuá»c, các môi trưá»ng ảo, v.v. Tôi sẽ khuyên bạn nên thá» uv.
+
+`uv` có thá» là m nhiá»u thứ, chẳng hạn:
+
+* **Cà i Äặt Python** cho bạn, bao gá»m nhiá»u phiên bản khác nhau
+* Quản là **các môi trưá»ng ảo** cho các dá»± án cá»§a bạn
+* Cà i Äặt **các gói (packages)**
+* Quản là **các thà nh phần phụ thuá»c và phiên bản** cá»§a các gói cho dá»± án cá»§a bạn
+* Äảm bảo rằng bạn có má»t **táºp hợp chÃnh xác** các gói và phiên bản Äá» cà i Äặt, bao gá»m các thà nh phần phụ thuá»c cá»§a chúng, Äá» bạn có thá» Äảm bảo rằng bạn có thá» chạy dá»± án cá»§a bạn trong sản xuất chÃnh xác như trong máy tÃnh cá»§a bạn trong khi phát triá»n, Äiá»u nà y ÄÆ°á»£c gá»i là **locking**
+* Và còn nhiá»u thứ khác nữa
+
+## Kết luáºn
+
+Nếu bạn Äã Äá»c và hiá»u hết những Äiá»u nà y, khá chắc là bây giá» bạn Äã **biết nhiá»u hÆ¡n** vá» môi trưá»ng ảo so vá»i kha khá láºp trình viên khác Äấy. ð¤
+
+Những hiá»u biết chi tiết nà y có thá» sẽ hữu Ãch vá»i bạn trong tương lai khi mà bạn cần gỡ lá»i má»t và i thứ phức tạp, và bạn Äã có những hiá»u biết vá» **ngá»n ngà nh gá»c rá»
cách nó hoạt Äá»ng**. ð
--
2.47.3