Pip không phát hiện các gói do người dùng cài đặt sau khi nâng cấp hệ thống python?


1

Tôi sử dụng Python trên PC Fedora KDE (x64) của tôi. Tôi đã từng sử dụng Fedora 25 và tôi đã cài đặt Python 3.5 bằng cách sử dụng sudo dnf install python3 và một số gói như numpyscipy sử dụng các lệnh như sudo dnf install python3-numpy. Bây giờ không phải tất cả các gói hoặc phiên bản phù hợp đều có sẵn trên kho của fedora, vì vậy những gói tôi cài đặt một mình ~/.local/lib/python3.5/site-packages/ thông qua pip3 install <packagename> --user.

Chuyển tiếp nhanh và tôi đã nâng cấp Fedora lên phiên bản 28, trong thời gian đó python3 đã được nâng cấp lên phiên bản 3.6. Tất cả những thứ khác python3-* gói cũng đã được nâng cấp phù hợp. Bây giờ pip3 không nhận ra bất kỳ gói nào do người dùng cài đặt như trong pip3 list --user, trả lại không có đầu ra nào cả. Nhưng ~/.local/lib/python3.5/site-packages/ thư mục vẫn tồn tại và có một loạt các gói.

Bây giờ tôi không chắc mình nên làm gì ....

  • Tôi có thể xóa nội dung của site-packages, nếu tôi biết chính xác những gì có thể bị xóa? Sau đó, tôi có thể thiết lập về việc điều tra lại những gói nào thực sự cần được cài đặt qua pip bây giờ.
  • Tôi có thể đổi tên ~/.local/lib/python3.5 đến ~/.local/lib/python3.6?
  • Một số cách khác để làm cho Pip nhập nội dung của các gói python cũ do người dùng cài đặt?

Tôi là loại mất về cách tiến hành.

Câu trả lời:


0

Đó là một điều khá dễ thực hiện nếu bạn vẫn có Python 3.5:

$ pip3.5 list --user --format=freeze | xargs pip3.6 install --user

sẽ cài đặt lại tất cả các gói trang web người dùng cho Python 3.6. Mọi thứ trở nên phức tạp hơn một chút khi cài đặt Python cũ không còn nữa (vì vậy không pip3.5 trong trường hợp của bạn), nhưng vẫn không có gì bạn không thể quản lý. Trước hết, hãy kiểm tra xem trang web của người dùng có còn tồn tại để bạn có thứ gì đó để làm việc không:

$ find ~/.local -type d -name "site-packages" | grep python3.5
/Users/hoefling/.local/lib/python3.5/site-packages

Bây giờ sử dụng pkg_resources để liệt kê các bản phân phối có sẵn trong trang web người dùng đó:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))"
wheel==0.30.0

Thư mục trang web người dùng sẽ được dẫn đến dòng mã Python sẽ quét thư mục bằng cách sử dụng pkg_resources.find_distributions chức năng (xem Bắt hoặc tạo phân phối phần trong tài liệu) là phần giống nhau pip sử dụng dưới mui xe, IIRC. Tôi vừa thêm một số định dạng để sau đó bạn có thể chuyển đầu ra sang mới pip3.6 trong lần lặp lại cuối cùng của việc mở rộng một lớp lót. Một lớp lót đầy đủ là:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))" | xargs pip3.6 install --user

pkg_resources Là một phần của setuptools gói và nên được cài đặt sẵn (ít nhất đây là trường hợp khi sử dụng trình cài đặt từ https://www.python.org/doads/ ). Nếu không, cài đặt setuptools Đầu tiên:

$ dnf install python3-setuptools
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.