Cách gỡ cài đặt gói được cài đặt với pip install --user


219

Có một --usertùy chọn cho pip có thể cài đặt gói Python cho mỗi người dùng:

pip install --user [python-package-name]

Tôi đã sử dụng tùy chọn này để cài đặt gói trên máy chủ mà tôi không có quyền truy cập root. Những gì tôi cần bây giờ là gỡ cài đặt gói đã cài đặt trên người dùng hiện tại. Tôi đã cố gắng thực hiện lệnh này:

pip uninstall --user [python-package-name]

Nhưng tôi đã nhận:

no such option: --user

Làm cách nào tôi có thể gỡ cài đặt gói mà tôi đã cài đặt pip install --user, ngoài việc tìm và xóa gói theo cách thủ công?

Tôi đã tìm thấy bài viết này

Pip không thể gỡ cài đặt từ thư mục gói của mỗi người dùng

trong đó mô tả rằng gỡ cài đặt các gói từ thư mục người dùng không được hỗ trợ. Theo bài báo nếu nó được thực hiện đúng thì với

pip uninstall [package-name]

gói đã được cài đặt cũng sẽ được tìm kiếm trong thư mục người dùng. Nhưng một vấn đề vẫn còn cho tôi. Điều gì xảy ra nếu cùng một gói được cài đặt cho cả hệ thống và mỗi người dùng? Nếu ai đó cần nhắm mục tiêu một thư mục người dùng cụ thể thì sao?


1
Không, bạn phải đặt một virtualenv cho mỗi người dùng: nhóm và cấp quyền hệ thống phù hợp cho thư mục chứa nó.
danius

3
Không có cách nào để cài đặt một gói toàn hệ thống cho tất cả người dùng và sau đó chọn lọc gỡ cài đặt cho một số người dùng. Nếu gói được cài đặt như --usersau đó gỡ cài đặt mà không --userlàm những gì bạn muốn.
tripleee

@tripleee: Tôi không có hệ thống cấp phép rộng rãi và không muốn, tôi chỉ cần gỡ cài đặt cho mỗi người dùng hiện tại
Serjik

1
Chỉ ra thư mục nào bạn không có quyền xóa và sửa các quyền của thư mục đó hoặc tự di chuyển nó sang bên.
tripleee

Câu trả lời:


196

Đã thử nghiệm điều này bằng Python 3.5 và pip 7.1.2 trên Linux, tình huống có vẻ như sau:

  • pip install --user somepackagecài đặt $HOME/.localvà gỡ cài đặt nó hoạt động bằng cách sử dụng pip uninstall somepackage.

  • Điều này đúng hay không somepackagecũng được cài đặt toàn hệ thống cùng một lúc.

  • Nếu gói được cài đặt ở cả hai nơi, chỉ có gói địa phương sẽ được gỡ cài đặt. Để gỡ cài đặt gói toàn hệ thống bằng cách sử dụng pip, trước tiên hãy gỡ cài đặt cục bộ, sau đó chạy lại lệnh gỡ cài đặt tương tự, với các rootđặc quyền.

  • Ngoài thư mục cài đặt người dùng được xác định trước, pip install --target somedir somepackagesẽ cài đặt gói vào somedir. Không có cách nào để gỡ cài đặt một gói từ một nơi như vậy bằng cách sử dụng pip. (Nhưng có một yêu cầu kéo không được trộn lẫn cũ trên Github thực hiện pip uninstall --target.)

  • Vì các địa điểm duy nhất pipsẽ được gỡ cài đặt từ toàn hệ thống và được xác định trước là người dùng cục bộ, nên bạn cần chạy pip uninstallvới tư cách là người dùng tương ứng để gỡ cài đặt từ thư mục cài đặt cục bộ của người dùng.


2
Những tuyên bố này có chính xác để chạy pip trong môi trường ảo không?
kbolino

trong trường hợp của tôi, việc gỡ cài đặt không hoạt động đối với gói pip 9.0.1 vẫn được cài đặt tại HOME /./ local
Genom

2
Điểm 2 dường như không đúng với hệ thống của tôi. Tôi có một gói hệ thống jediđược cài đặt trong /usr/lib64/python2.7/site-packages/. Khi tôi làm, như một người dùng bình thường: pip install --user jedi và sau đó pip uninstall jedi, pip cố gắng gỡ cài đặt /usr/lib64/python2.7/site-packages/jedivà sau đó khởi động Permission denied. Vì vậy, nếu --userkhông tồn tại cho lệnh gỡ cài đặt, làm thế nào để tôi nói gỡ cài đặt không cố gắng gỡ cài đặt /usr/lib64/python2.7/site-packages/jedinhưng ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd

Chính xác giống như ở đây là @AstroFloyd
Nikana Reklawyks

28

ví dụ để gỡ cài đặt gói 'oauth2client' trên MacOS:

pip uninstall oauth2client

9

Hãy cẩn thận, cho những người sử dụng pip install --user some_pkg bên trong một môi trường ảo .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

Trong trường hợp này, bạn phải hủy kích hoạt môi trường ảo hiện tại , sau đó sử dụng tương ứng python/ pipthực thi để liệt kê hoặc gỡ cài đặt các gói trang web của người dùng:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Lưu ý rằng vấn đề này đã được báo cáo vài năm trước . Và dường như kết luận hiện tại là: --userkhông hợp lệ trong môi trường ảo pip, vì vị trí người dùng không thực sự có ý nghĩa đối với môi trường ảo.


3
Quá muộn!, Tôi đã sử dụng --userbên trong env ảo, có cách nào để hoàn nguyên điều đó không?, Vì pip listkhông hoạt động ....
jnfran92

2
'Và dường như kết luận hiện tại là: - người dùng không hợp lệ trong hệ thống ảo của env, vì vị trí người dùng không thực sự có ý nghĩa đối với môi trường ảo.' Đã đồng ý. Người dùng cài đặt đánh bại toàn bộ mục đích của một môi trường ảo. Thật không may, có rất nhiều ví dụ tồi tệ của những người làm điều này ra khỏi đó.
Stephen Bosch

5

Tôi nghĩ có thể gỡ cài đặt các gói được cài đặt với --usercờ. Cái này làm việc cho tôi;

pip freeze --user | xargs pip uninstall -y

Đối với trăn 3;

pip3 freeze --user | xargs pip3 uninstall -y

Nhưng bằng cách nào đó các lệnh này không gỡ cài đặt setuptools và pip. Sau những lệnh đó (nếu bạn thực sự muốn sạch python), bạn có thể xóa chúng bằng;

pip uninstall setuptools && pip uninstall pip


2
Đây là một giải pháp thanh lịch làm việc tốt cho tôi.
Stephen Bosch

2

Câu trả lời là chưa thể . Bạn phải loại bỏ nó bằng tay.


Trong khi cài đặt một gói, đã có một dấu vết. Gỡ cài đặt không bao giờ làm việc sau đó.
syam

Làm cách nào để liệt kê tất cả các tệp pip được cài đặt cho một gói nhất định (để tôi có thể xóa chúng)?
AstroFloyd

Thực sự không thể vì pip chạy setup.py chạy mã bên ngoài. Cho đến khi setup.py bị xóa hoàn toàn, hãy quên nó đi, có lẽ đến năm 2022 thì nó sẽ được.
sorin

2

Như @ thomas-lotze đã đề cập, hiện tại công cụ pip không làm điều đó vì không có tùy chọn --user tương ứng. Nhưng những gì tôi tìm thấy là tôi có thể đăng nhập ~ / .local / bin và tìm kiếm pip #. # Cụ thể trông giống như nó tương ứng với tùy chọn --user.

Trong trường hợp của tôi:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

Và sau đó chỉ cần gỡ cài đặt với phiên bản pip cụ thể.


stackoverflow.com/a/11250821/14420 để xem công thức gỡ cài đặt bồn tắm, ví dụ như ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -ymọi thứ trừ các gói được cài đặt ở chế độ có thể chỉnh sửa
matt wilkie

0

Tôi đang chạy Anaconda phiên bản 4.3.22 và môi trường python3.6.1, và đã gặp sự cố này. Đây là lịch sử và cách khắc phục:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

Tôi đã làm điều này vào môi trường python3.6 của tôi và gặp lỗi này.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Tiếp theo, tôi đã thử tải xuống python3.6 và đặt python3.dll vào thư mục và trong các thư mục khác nhau. không có gì thay đổi.

cuối cùng, điều này đã sửa nó:

pip uninstall opencv-python

(phiên bản conda-forge khác vẫn được cài đặt) Phiên bản này chỉ còn lại phiên bản conda và hoạt động trong 3.6.

>>>import cv2
>>>

đang làm việc!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.