Gần đây tôi đã chạy vào một vấn đề khi sử dụng pip
's -I
cờ mà tôi muốn đến một nơi nào tài liệu:
-I
sẽ không gỡ cài đặt gói hiện có trước khi tiến hành; nó sẽ chỉ cài đặt nó trên cái cũ. Điều này có nghĩa là bất kỳ tệp nào sẽ bị xóa giữa các phiên bản thay vào đó sẽ được giữ nguyên vị trí. Điều này có thể gây ra hành vi kỳ lạ nếu những tệp đó chia sẻ tên với các mô-đun được cài đặt khác.
Ví dụ: giả sử có một gói có tên package
. Trong một trong package
các tập tin, họ sử dụng import datetime
. Bây giờ, trong package@2.0.0
, điều này trỏ đến datetime
mô-đun thư viện tiêu chuẩn , nhưng trong package@3.0.0
, họ đã thêm một cục bộ datetime.py
thay thế cho phiên bản thư viện tiêu chuẩn (vì bất kỳ lý do gì).
Bây giờ hãy nói rằng tôi chạy pip install package==3.0.0
, nhưng sau đó nhận ra rằng tôi thực sự muốn phiên bản 2.0.0
. Nếu bây giờ tôi chạy pip install -I package==2.0.0
, tệp cũ datetime.py
sẽ không bị xóa, vì vậy mọi cuộc gọi đếnimport datetime
sẽ nhập sai mô-đun.
Trong trường hợp của tôi, điều này biểu hiện với các lỗi cú pháp lạ vì phiên bản mới hơn của gói đã thêm một tệp chỉ tương thích với Python 3 và khi tôi hạ cấp các phiên bản gói để hỗ trợ Python 2, tôi tiếp tục nhập mô-đun chỉ có Python-3.
Dựa trên điều này, tôi sẽ lập luận rằng việc gỡ cài đặt gói cũ luôn được ưu tiên sử dụng -I
khi cập nhật các phiên bản gói đã cài đặt.
pip install MySQL_python==1.8.9