Làm cách nào để gỡ cài đặt gói python đã được cài đặt bằng distutils?


92

Bạn có thể chỉ cần xóa thư mục khỏi cài đặt python của mình hay có bất kỳ tệp nào còn sót lại mà bạn phải xóa không?

Câu trả lời:


45

Nó thay đổi dựa trên các tùy chọn mà bạn chuyển đến installvà nội dung của các tệp cấu hình distutils trên hệ thống / trong gói. Tôi không tin rằng bất kỳ tệp nào được sửa đổi bên ngoài các thư mục được chỉ định theo những cách này.

Đáng chú ý, distutils không có lệnh gỡ cài đặt tại thời điểm này.

Cũng cần lưu ý rằng việc xóa một gói / trứng có thể gây ra các vấn đề phụ thuộc - các tiện ích như easy_installcố gắng giảm bớt các vấn đề như vậy.


4
Bạn có thể vui lòng cập nhật điều này để giải quyết trực tiếp phần tệp còn tồn tại của câu hỏi không?
S.Lott

Tôi nghĩ là tôi đã làm - không có tệp nào được tạo bên ngoài các thư mục được chỉ định bởi cấu hình distutils và cờ cài đặt, vì vậy bất kỳ tệp nào "tồn tại" sẽ tồn tại trong các thư mục này. Nó thay đổi theo từng gói.
cdleary

2
@cdleary: cảm ơn, nhưng tôi hy vọng bạn chỉ cần làm rõ và củng cố câu trả lời của mình, chứ không phải thêm một chuỗi bình luận dài.
S.Lott

2
@ S.Lott: Xin lỗi, nhưng tôi không biết bạn muốn làm rõ phần nào của câu trả lời - bạn có thể nói rõ hơn được không?
cdleary

1
msg139773 Ngày: 2011-07-04 14:35 distutils2 / packaging hiện cung cấp chức năng loại bỏ và lệnh loại bỏ pysetup.
Edward

19

Ba thứ được cài đặt mà bạn sẽ cần xóa là:

  1. Gói / mô-đun
  2. Tập lệnh
  3. Hồ sơ dữ liệu

Bây giờ trên hệ thống linux của tôi, những thứ này đang tồn tại:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Nhưng trên hệ thống windows, chúng có nhiều khả năng nằm hoàn toàn trong thư mục phân phối Python. Tôi không biết gì về OSX ngoại trừ việc tuân theo mô hình linux thì giống hơn.


14

Một bản hack dựa trên dấu thời gian khác:

  1. Tạo một mỏ neo: touch /tmp/ts
  2. Cài đặt lại gói cần xóa: python setup.py install --prefix=<PREFIX>
  3. Loại bỏ các tệp gần đây hơn tệp neo: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1. Tôi không thích | xargs rm -r. Tôi khuyên bạn nên xem qua từng tệp theo cách thủ công . Trên ext4 (và các hệ thống tệp khác), điều này findcũng sẽ liệt kê tất cả các thư mục . Nếu tiền tố của bạn là /usr, bạn sẽ xóa/usr/* .
Mateen Ulhaq

8

Có, thật an toàn nếu chỉ cần xóa bất kỳ thứ gì đã cài đặt distutils. Điều đó áp dụng cho các thư mục đã cài đặt hoặc tệp .egg. Đương nhiên bất cứ thứ gì phụ thuộc vào mã đó sẽ không còn hoạt động.

Nếu bạn muốn làm cho nó hoạt động trở lại, chỉ cần cài đặt lại.

Nhân tiện, nếu bạn đang sử dụng các bản phân phối cũng nên cân nhắc sử dụng tính năng nhiều phiên bản. Nó cho phép bạn cài đặt nhiều phiên bản của bất kỳ gói nào. Điều đó có nghĩa là bạn không cần phải xóa phiên bản cũ của gói nếu bạn chỉ muốn cài đặt phiên bản mới hơn.


5

Trong ubuntu 12.04, tôi thấy rằng nơi duy nhất bạn cần xem theo mặc định là

/usr/local/lib/python2.7/

Và chỉ cần xóa thư mục và tệp được liên kết, nếu có!


Đôi khi trong / usr / lib / python <2.7 / 3.6>
Vineet

4

Nếu điều này dành cho mục đích thử nghiệm và / hoặc phát triển, setuptools có lệnh phát triển cập nhật mỗi khi bạn thực hiện thay đổi (vì vậy bạn không phải gỡ cài đặt và cài đặt lại mỗi khi thực hiện thay đổi). Và bạn cũng có thể gỡ cài đặt gói bằng lệnh này.

Nếu bạn sử dụng điều này, bất kỳ thứ gì bạn khai báo dưới dạng tập lệnh sẽ bị bỏ lại dưới dạng tệp tồn tại.


4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

loại bỏ tất cả các tệp và bỏ lại các thư mục trống.

Đó không phải là lý tưởng, nó phải là đủ để tránh xung đột gói.

Và sau đó bạn có thể hoàn thành công việc theo cách thủ công nếu muốn bằng cách đọc files.txt , hoặc dũng cảm và cũng tự động xóa thư mục trống.

Một người trợ giúp an toàn sẽ là:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Đã thử nghiệm bằng Python 2.7.6, Ubuntu 14.04.



2

Tôi vừa gỡ cài đặt một gói python và mặc dù tôi không chắc mình đã làm như vậy hoàn hảo, nhưng tôi hoàn toàn tự tin.

Tôi bắt đầu bằng cách lấy danh sách tất cả các tệp liên quan đến python, được sắp xếp theo ngày, với giả định rằng tất cả các tệp trong gói của tôi ít nhiều sẽ có cùng một dấu thời gian và không có tệp nào khác.

May mắn thay, tôi đã cài đặt python /opt/Python-2.6.1; nếu tôi đang sử dụng Python đi kèm với bản phân phối Linux của mình, tôi sẽ phải tìm kiếm tất cả /usr, điều này sẽ mất nhiều thời gian.

Sau đó, tôi chỉ xem xét danh sách đó và nhẹ nhõm lưu ý rằng tất cả những thứ mà tôi muốn xóa bao gồm một thư mục /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/và một tệp /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info,.

Vì vậy, tôi chỉ xóa chúng.

Đây là cách tôi có danh sách tệp được sắp xếp theo ngày tháng:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Nhân tiện, tôi nghĩ đó phải là GNU "find"; hương vị bạn nhận được trên OS X không biết về "-printf '% T @'")

Tôi sử dụng nó mọi lúc.


2

Đối với Windows 7,

Bảng điều khiển -> Chương trình -> Gỡ cài đặt

, sau đó

chọn gói python để loại bỏ.


@Mauricio Tôi không thấy các phiên bản cũ trong danh sách nhưng tôi có thể thấy các tệp trứng trong gói trang web. Đây co phải vân đê?

1

Trên Mac OSX, xóa thủ công 2 thư mục này theo pathToPython / site-package / của bạn sẽ hoạt động:

  • {tên gói hàng}
  • {packageName} - {version} -info

ví dụ, để loại bỏ pyasn1 , là một dự án đã cài đặt distutils:

  • rm -rf lib / python2.7 / site-pack / pyasn1
  • rm -rf lib / python2.7 / site-pack / pyasn1-0.1.9-py2.7.egg-info

Để biết đâu là gói trang web của bạn:

python -m site

1
Hoạt động như mong đợi.
c1377554

-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

Sau đó, tôi gõ:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Làm xong!


1
Hãy cố gắng giải thích bạn đang làm gì và tại sao thay vì chỉ hiển thị đầu ra bảng điều khiển.
Headhunter Xamd
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.