Tại sao pip đang cài đặt phiên bản cũ trong gói của tôi?


79

Tôi vừa tải lên phiên bản gói mới của mình lên PyPi (1.2.1.0-r4): Tôi có thể tải xuống tệp egg và cài đặt nó bằng easy_install và phiên bản được kiểm tra chính xác. Nhưng khi tôi cố gắng cài đặt bằng pip, nó sẽ cài đặt phiên bản 1.1.0.0. Ngay cả khi tôi chỉ định rõ ràng phiên bản để pip pip install -Iv tome==1.2.1.0-r4, tôi nhận được thông báo này : Requested tome==1.2.1.0-r4, but installing version 1.1.0.0, nhưng tôi không hiểu tại sao.

Tôi đã kiểm tra kỹ parse_versionvà xác nhận rằng chuỗi phiên bản trên 1.2.1 lớn hơn chuỗi phiên bản trên 1.1.0 như được hiển thị:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

Vì vậy, bất kỳ ý tưởng tại sao nó chọn cài đặt 1.1.0 thay thế?


Không thể tái tạo. pip install -Iv tome==1.2.1.0-r4cài đặt cho tôi (theo cả các tin nhắn và pip freezecác gói tome==1.2.1.0-r4.
David Robinson

Nó có lẽ vẫn còn trong con đường của bạn ở đâu đó? Hãy thử nó với-U
Wolph

Hm..đúng vậy, điều đó thú vị. Tôi đã thử gỡ cài đặt nó bằng pip, tôi đoán tôi sẽ phải tìm hiểu thêm và đảm bảo rằng nó đã biến mất. Cảm ơn vì đã kiểm tra!
brianmearns

Có vẻ như một số loại lỗi trong pip. Tôi gặp sự cố tương tự nhưng không thể cài đặt phiên bản django-ngonypie cũ hơn.
simplelizz

Câu trả lời:


95

Đây là một câu hỏi tuyệt vời. Tôi đã mất mãi mãi để tìm ra. Đây là giải pháp phù hợp với tôi:

Rõ ràng, nếu pipcó thể tìm thấy phiên bản cục bộ của gói, pipsẽ thích các phiên bản cục bộ hơn các phiên bản từ xa. Tôi thậm chí đã ngắt kết nối máy tính của mình khỏi Internet và thử lại - khi pipvẫn cài đặt thành công gói và thậm chí không phàn nàn, nguồn rõ ràng là cục bộ.

Phần thực sự khó hiểu, trong trường hợp của tôi, là piptìm thấy các phiên bản mới hơn trên pypi , báo cáo chúng, và sau đó tiếp tục và cài đặt lại phiên bản cũ hơn. Ngoài ra, nó không cho tôi biết nó đang làm gì và tại sao.

Vậy tôi đã giải quyết vấn đề này như thế nào?

Bạn có thể pipđưa ra đầu ra dài dòng bằng cách sử dụng -vcờ ... nhưng một cờ là không đủ. Tôi RTFM-ed sự trợ giúp, cho biết bạn có thể làm -vnhiều lần, tối đa 3 lần, để có đầu ra dài dòng hơn. Tôi cũng vậy:

pip install -vvv <my_package>

Sau đó, tôi xem qua đầu ra. Một dòng đập vào mắt tôi:

Nguồn trong / tmp / pip-build-root / có phiên bản 0.0.11, đáp ứng yêu cầu <my_package>

Tôi đã xóa thư mục đó, sau đó pipcài đặt phiên bản mới nhất từ ​​pypi.


Có vẻ như điều này vẫn chưa được sửa.
Ale

1
@ Ale110 Nó đã được sửa - xem câu trả lời của tôi để biết chi tiết.
Piotr Dobrogost

5
FYI bạn có thể sử dụng -vvvthay thế -v -v -v.
bfontaine

3
Bạn cũng có thể sử dụng --no-cache-dircờ thay vì tìm kiếm và xóa tệp trong /tmp/.
ethanabrooks

40

Thử buộc tải xuống gói lại bằng:

pip install --no-cache-dir --upgrade <package>

1
Điều này đã làm việc cho tôi. Cuối cùng đã cài đặt v0.4 photoutils trên v0.2.1. Pip đang tải xuống tar v0.4 nhưng sau đó nó sẽ chỉ cài đặt (hoặc giữ) v0.2.1. Các cờ --no-cache-dir và --upgrade cuối cùng đã làm được điều đó! Cảm ơn bạn
scibuff

4
Đây là câu trả lời đúng ở đây. Pip giữ bộ nhớ cache của trang Pypi có liên quan trong 600 giây theo mặc định. Vì vậy, ngay cả khi bạn xóa gói được lưu trong bộ nhớ cache cục bộ, bạn phải đợi 10 phút để pip tìm nạp trang mới với tất cả các liên kết phiên bản mới.
brthornbury

1
Đây có vẻ như là một câu trả lời rất hợp lý. Tuy nhiên, các lượt cài đặt pip vẫn nhận được cùng một phiên bản cũ, mặc dù phiên bản tôi xem qua pip searchlà mới hơn.
Mavamaarten

1
Hãy thử kiểm tra xem đó có phải là thứ gì đó với virtualenv không. Ah phiên bản trăn.
Iacchus

25

Cảm ơn Marcus Smith , người đã làm công việc tuyệt vời với tư cách là người bảo trì pip, điều này đã được khắc phục trong phiên bản 1.4 của pip được phát hành vào 2013-07-23.

Thông tin liên quan từ bảng thay đổi cho phiên bản này

Đã khắc phục một số sự cố (# 413, # 709, # 634, # 602 và # 939) liên quan đến việc dọn dẹp và không sử dụng lại thư mục bản dựng. (Kéo # 865, # 948)


5
Đây phải được đánh dấu là câu trả lời đúng. Nâng cấp pip như thế này:pip install -U pip
Emil Stenström

2
Bản sửa lỗi này vẫn không giải quyết được pip một cách âm thầm bằng cách sử dụng phiên bản đã lưu trong bộ nhớ cache, có thể được giải quyết bằng cách sử dụng câu trả lời của Iacchus
Burrito

1
Không, nó dường như không được cố định. Tôi đang gặp phải vấn đề tương tự ngay bây giờ.
Regis,

17

Ở đây tôi thấy rằng có một lỗi đã biết trong pip là nó sẽ không kiểm tra phiên bản nếu có một thư mục bản dựng với các nguồn chưa được giải nén. Tôi đã kiểm tra điều này trên gói rắc rối của mình và sau khi xóa các nguồn của nó khỏi thư mục xây dựng pip đã cài đặt phiên bản cần thiết.


2
Cảm ơn vì thông tin. Bất kỳ ý tưởng nơi tôi nên tìm thư mục xây dựng? Tôi đã thử xóa nó khỏi Python \ Lib \ site-package, nhưng kết quả vẫn giống nhau. Tôi không thực hiện lệnh từ vị trí có gói hoặc bất cứ thứ gì.
brianmearns

@ sh1ftst0rm Tôi đang sử dụng virtualenv trong linux và đối với django-ngonypie thì đó là: "$ VIRTUAL_ENV / build / django-Deliciousypie". Cố gắng kiểm tra đầu thư mục Python hoặc chỉ sử dụng tìm kiếm trong hệ thống của bạn. Ngoài ra, bạn có thể thử sử dụng "pip install -b <path to custom build dir>".
simplelizz

1
Đây dường như không phải là vấn đề của tôi, tôi đã tìm kiếm rất nhiều và không thể tìm thấy bất kỳ dấu vết nào của gói hoặc thư mục xây dựng cho nó trên hệ thống của mình. Nó phải có một số lỗi khác trong pip = (Tốt mũi dù sao, tôi chắc chắn rằng đây sẽ là bản sửa lỗi cho rất nhiều người..
brianmearns

9

Nếu bạn đang sử dụng pipphiên bản đi kèm với một số gói phân phối (ví dụ: Ubuntu python-pip), bạn có thể cần cài đặt pipphiên bản mới hơn :

Cập nhật piplên phiên bản mới nhất:

sudo pip install -U pip

Trong trường hợp "virtualenv", bỏ qua "sudo":

pip install -U pip

Lệnh sau có thể được yêu cầu, nếu trình bao của bạn báo cáo như -bash: /usr/bin/pip: No such file or directorysau khi pipcập nhật:

hash -d pip

Bây giờ cài đặt gói của bạn như bình thường:

pip install -U foo

hoặc là

pip install foo==package.version.here


6

Gặp sự cố tương tự khi cập nhật pika 0.9.5 lên 0.9.8. Cách duy nhất làm việc đã được cài đặt từ tarball: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.


2
+1 Cảm ơn, điều này đã giúp tôi hiểu một điều quan trọng: pip dựa trên bản phân phối nguồn: với phiên bản mới nhất của tôi, tôi đã quên tải lên bản phân phối nguồn, vì vậy khi tôi cố gắng cài đặt, nó sẽ chỉ nhận được phiên bản trước đó. Điều này không giải quyết được vấn đề ban đầu của tôi, nhưng rất hữu ích khi biết.
brianmearns

1

Đối với trường hợp của tôi, tôi phải xóa .pipthư mục trong thư mục chính của mình và sau đó tôi có thể nhận được các phiên bản sau của nhiều thư viện. Lưu ý rằng điều này là trên linux.

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0

0

Tôi nhận thấy rằng nếu bạn sử dụng microversions, pip dường như không nhận ra chúng. Ví dụ: chúng tôi không thể tải phiên bản 1.9.9.1 để nâng cấp.


2
có lẽ bởi vì '1.9.9.1' là không SemVer tương thích, xem semver.org
tector

0

Trong trường hợp của tôi, phiên bản python được sử dụng (3.4) không đáp ứng yêu cầu phụ thuộc Django 2.1 (python> = 3.5).


0

Trong trường hợp của tôi, tôi đang cài đặt gói .tar.gz từ Artifactory mà tôi thực hiện rất nhiều bản cập nhật. Để ghi đè các tệp Python đã lưu trong bộ nhớ cache của tôi và luôn lấy / cài đặt bản mới nhất mà tôi có thể chạy:

pip install --no-cache-dir --force-reinstall <path/to/tar.gz>

Bạn sẽ thấy phần này tải xuống lại mọi tệp cần thiết và cài đặt chúng, thay vì sử dụng bộ nhớ cache cục bộ của bạn.


0

Trong trường hợp của tôi, ai đó đã xuất bản phiên bản mới nhất của một gói với python2, vì vậy cố gắng pip3 installlấy nó đã lấy một phiên bản cũ hơn đã được tạo bằng python3.

Những điều hữu ích cần kiểm tra khi gỡ lỗi này:

  • Nếu pip installtuyên bố là không thể tìm thấy phiên bản, hãy xem liệu pip searchcó thể xem được không.
  • Hãy xem phần "Tải xuống Tệp" trên kho pypi - tên tệp có thể gợi ý điều gì sai (trong trường hợp của tôi, tôi đã thấy -py2-ở đó rõ ràng như ban ngày).
  • Theo đề xuất của những người khác, hãy thử chạy pip install --no-cache-dirtrong trường hợp pip không buồn hỏi internet vì nó đã có câu trả lời cục bộ của bạn.

0

Tôi đã ẩn các tệp chưa được phiên bản trong tab Git trong PyCharm đang được cài đặt pip install .mặc dù tôi không thấy tệp ở bất kỳ nơi nào khác.

Mất một thời gian dài để tìm thấy nó cho tôi, đăng bài này với hy vọng rằng nó sẽ giúp ích cho người khác.


0

Đề phòng bất kỳ ai khác gặp rắc rối với việc nâng cấp torchtext (hoặc có thể là bất kỳ torchthư viện nào khác ):

Mặc dù https://pypi.org/project/torchtext/ nói rằng bạn có thể chạy, pip install torchtexttôi phải cài đặt nó tương tự torchbằng cách chỉ định --find-linksaka -f:

pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

Điều khiến tôi khó chịu là PyCharm đã chỉ tôi đến phiên bản mới, nhưng không thể tìm thấy nó khi cố gắng nâng cấp lên nó. Tôi đoán rằng PyCharm sử dụng cơ chế riêng của mình để phát hiện các phiên bản mới. Sau đó, khi gọi pipbên dưới, nó không tìm thấy phiên bản mới mà không có --find-linkstùy chọn.

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.