Nếu bạn đã nâng cấp phân phối Linux của mình gần đây (chẳng hạn như Ubuntu 23.04 trở đi) và cố gắng cài đặt gói Python toàn cầu bằng cách sử dụng pip, bạn có thể đã gặp một thông báo lỗi khó chịu:
error: externally-managed-environment
Lỗi này không phải là một lỗi lập trình; đây là một biện pháp bảo vệ có chủ ý được giới thiệu bởi Đề xuất nâng cao Python (PEP) 668. Mục đích của nó là ngăn người dùng vô tình làm hỏng hệ điều hành của họ bằng cách thay đổi hoặc xóa các gói Python cốt lõi do trình quản lý gói gốc của hệ thống (như apt hoặc dnf) quản lý.
Mặc dù đây là một biện pháp an ninh cần thiết, nó có thể làm gián đoạn quy trình phát triển của bạn. Hướng dẫn này sẽ giải thích nguyên nhân của lỗi và cung cấp ba giải pháp hiệu quả nhất, từ những thực hành tốt nhất đến những cách khắc phục nhanh (nhưng mạo hiểm).
Hiểu Lỗi "externally-managed-environment" (PEP 668)
Vấn đề chính là xung đột của quyền kiểm soát. Hệ điều hành của bạn phụ thuộc vào các phiên bản cụ thể của các gói Python cho chức năng của nó. Khi bạn sử dụng pip install toàn cầu, bạn có nguy cơ ghi đè hoặc loại bỏ các gói quan trọng cho hệ thống, dẫn đến sự không ổn định hoặc thất bại của hệ thống.
PEP 668 giải quyết vấn đề này bằng cách thêm một tệp có tên EXTERNALLY-MANAGED vào thư mục cài đặt Python của hệ thống. Khi pip phát hiện tệp này, nó từ chối cài đặt gói toàn cầu, buộc bạn phải sử dụng một phương pháp an toàn hơn.
Giải Pháp 1: Thực Hành Tốt Nhất - Sử Dụng Môi Trường Ảo (venv)
Giải pháp được khuyến nghị và mạnh mẽ nhất là sử dụng một môi trường ảo. Một môi trường ảo tạo ra một cài đặt Python cách ly, tự chứa cho mỗi dự án, cho phép bạn cài đặt, nâng cấp và xóa các gói mà không ảnh hưởng đến hệ thống toàn cầu hoặc các dự án khác.





Nguyên tắc về sự cách ly làm cho các môi trường ảo trở nên cần thiết cho phát triển Python cũng quan trọng không kém cho các hoạt động web chuyên nghiệp như thu thập dữ liệu và scraping web.
Khi bạn sử dụng các thư viện Python (như