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:
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.
Ba thứ được cài đặt mà bạn sẽ cần xóa là:
Bây giờ trên hệ thống linux của tôi, những thứ này đang tồn tại:
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.
Một bản hack dựa trên dấu thời gian khác:
touch /tmp/tspython setup.py install --prefix=<PREFIX>find <PREFIX> -cnewer /tmp/ts | xargs rm -r| 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/* .
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.
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.
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.
cho Python trong Windows:
python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
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.
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:
ví dụ, để loại bỏ pyasn1 , là một dự án đã cài đặt distutils:
Để biết đâu là gói trang web của bạn:
python -m site
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!