pip가 내 패키지의 이전 버전을 설치하는 이유는 무엇입니까?


80

방금 PyPi (1.2.1.0-r4)에 새 버전의 패키지를 업로드했습니다. egg 파일을 다운로드하고 easy_install로 설치할 수 있으며 버전이 올바르게 확인됩니다. 하지만 pip를 사용하여 설치하려고하면 버전 1.1.0.0이 대신 설치됩니다. pip를 사용하여 버전을 명시 적으로 지정하더라도이 pip install -Iv tome==1.2.1.0-r4메시지가 표시 Requested tome==1.2.1.0-r4, but installing version 1.1.0.0되지만 그 이유를 이해할 수 없습니다.

나는 두 번 확인하고 parse_version1.2.1의 버전 문자열이 1.1.0의 버전 문자열보다 큰지 확인했습니다.

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

왜 대신 1.1.0을 설치하기로 선택했는지 아십니까?


재현 할 수 없습니다. pip install -Iv tome==1.2.1.0-r4메시지와 양에 따라 (나를 위해 설치 pip freeze패키지 tome==1.2.1.0-r4.
데이비드 로빈슨

아직 어딘가에 당신의 길에 있습니까? 시도해보세요-U
Wolph

흠 .. 흥미 롭군요. 나는 pip로 그것을 제거하려고 시도했지만 더 많은 것을 파헤쳐 서 모두 사라 졌는지 확인해야 할 것 같습니다. 확인해 주셔서 감사합니다!
brianmearns 2013 년

pip에 어떤 종류의 버그처럼 보입니다. 비슷한 문제가 있지만 이전 버전의 django-tastypie를 설치할 수 없습니다.
simplylizz 2013 년

답변:


95

이것은 훌륭한 질문입니다. 알아내는 데 영원히 걸렸습니다. 이것은 나를 위해 작동하는 솔루션입니다.

분명히 pip패키지의 로컬 버전을 찾을 수 있다면 pip원격 버전보다 로컬 버전을 선호 할 것입니다. 나는 심지어 내 컴퓨터를 인터넷에서 분리하고 다시 시도했다 pip. 패키지를 성공적으로 설치했고 불평조차하지 않았을 때 소스는 분명히 로컬이었다.

제 경우에 정말 혼란스러운 부분 pippypi 에서 최신 버전 을 찾아 보고 한 다음 계속 진행하여 어쨌든 이전 버전을 다시 설치했다는 것입니다 ... arggh. 또한 그것이 무엇을하는지, 왜 그런지 말해주지 않았습니다.

이 문제를 어떻게 해결 했습니까?

플래그를 pip사용하여 자세한 출력을 얻을 수 -v있지만 하나는 충분하지 않습니다. -v좀 더 자세한 출력을 위해 최대 3 배까지 여러 번 수행 할 수 있다는 도움말을 RTFM-ed했습니다 . 그래서 나는 :

pip install -vvv <my_package>

그런 다음 출력을 살펴 보았습니다. 한 줄이 내 눈을 사로 잡았습니다.

/ tmp / pip-build-root /의 소스 버전은 0.0.11이며 요구 사항 <my_package>를 충족합니다.

그 디렉토리를 삭제 한 후 pippypi에서 최신 버전 을 설치했습니다.


아직 수정되지 않은 것 같습니다.
Ale

1
@ Ale110 수정되었습니다-자세한 내용은 내 답변을 참조하십시오.
Piotr Dobrogost 2013 년

5
참고 -vvv-v -v -v.
bfontaine 2014

3
--no-cache-dir에서 파일을 찾아 삭제하는 대신 플래그를 사용할 수도 있습니다 /tmp/.
ethanabrooks

41

다음을 사용하여 패키지를 다시 강제로 다운로드하십시오.

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

1
이것은 나를 위해 일했습니다. 마침내 v0.2.1 위에 설치된 v0.4의 photoutils를 얻었습니다. Pip은 v0.4 tar를 다운로드했지만 v0.2.1 만 설치 (또는 유지)합니다. --no-cache-dir 및 --upgrade 플래그가 마침내 해냈습니다! 감사합니다
scibuff

4
이것은 여기에서 정답입니다. Pip은 기본적으로 600 초 동안 관련 Pypi 페이지의 캐시를 유지합니다. 따라서 로컬로 캐시 된 패키지를 제거하더라도 pip가 모든 새 버전 링크가있는 새 페이지를 가져올 때까지 10 분 동안 기다려야합니다.
brthornbury

1
이것은 매우 논리적 인 대답처럼 보입니다. 그러나 pip 설치는 내가 통해 보는 버전 pip search이 더 최신 이지만 동일한 이전 버전을 얻습니다 .
Mavamaarten 2010 년

1
virtualenv로 확인하십시오. 아 파이썬 버전.
Iacchus

25

pip의 메인 테너로서 놀라운 작업을 수행 하는 Marcus Smith 덕분 에이 문제는 2013-07-23에 출시 된 pip 1.4 버전에서 수정되었습니다.

이 버전에 대한 변경 로그의 관련 정보

빌드 디렉터리 정리 및 재사용 안 함과 관련된 여러 문제 (# 413, # 709, # 634, # 602 및 # 939)를 수정했습니다. (풀 # 865, # 948)


5
이것은 정답으로 표시되어야합니다. 다음과 같이 핍 업그레이드 :pip install -U pip
Emil Stenström 2014 년

2
이 수정 사항은 여전히 ​​캐시 된 버전을 사용하여 pip를 자동으로 해결하지 않습니다.이 문제는 Iacchus의 답변을 사용하여 해결할 수 있습니다
Burrito

1
아니요, 수정되지 않은 것 같습니다. 나는 지금 같은 문제에 직면하고 있습니다.
Regis는

17

압축이 풀린 소스가있는 빌드 디렉토리가 있으면 버전을 확인하지 않는 알려진 버그가 pip에 있음을 여기서 발견 했습니다. 문제가되는 패키지에서 이것을 확인하고 빌드 디렉토리에서 소스를 삭제 한 후 pip가 필요한 버전을 설치했습니다.


2
정보 주셔서 감사합니다. 빌드 디렉토리를 어디에서 찾아야하는지 아십니까? Python \ Lib \ site-packages에서 삭제를 시도했지만 결과는 동일했습니다. 패키지가있는 위치에서 명령을 실행하지 않습니다.
brianmearns

@ sh1ftst0rm Linux에서 virtualenv를 사용하고 있으며 django-tastypie의 경우 "$ VIRTUAL_ENV / build / django-tastypie"입니다. Python 디렉토리의 상단을 확인하거나 시스템에서 검색을 사용하십시오. 또한 "pip install -b <path to custom build dir>"을 사용할 수도 있습니다.
simplylizz 2013 년

1
이것은 내 문제가 아닌 것 같으며 멀리서 검색했으며 내 시스템에서 패키지 또는 빌드 디렉토리의 흔적을 찾을 수 없습니다. pip = (. 어쨌든 좋은 팁, 이것이 많은 사람들을위한 수정이 될 것이라고 확신합니다.
brianmearns

9

pip일부 배포 패키지 (예 : Ubuntu python-pip)와 함께 제공 되는 버전을 사용하는 경우 최신 pip버전 을 설치해야 할 수 있습니다 .

pip최신 버전으로 업데이트 :

sudo pip install -U pip

"virtualenv"의 경우 "sudo"를 건너 뜁니다.

pip install -U pip

셸이 업데이트 -bash: /usr/bin/pip: No such file or directory후 다음과 같은 내용 을 보고하는 경우 다음 명령이 필요할 수 있습니다 pip.

hash -d pip

이제 평소와 같이 패키지를 설치하십시오.

pip install -U foo

또는

pip install foo==package.version.here


6

pika 0.9.5를 0.9.8로 업데이트하는 데 동일한 문제가 발생했습니다. 유일한 작동 방법은 tarball에서 설치하는 것입니다 : pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.


2
+1 감사합니다. 이것은 저에게 중요한 정보를 제공했습니다. pip는 소스 배포에 의존합니다. 최신 버전에서는 소스 dist를 업로드하는 것을 잊었으므로 설치하려고 할 때 이전 버전 만 가져옵니다. 이것은 내 원래 문제를 해결하지 못하지만 알아두면 도움이됩니다.
brianmearns 2013

1

제 경우에는 .pip홈 디렉토리에서 폴더 를 삭제해야했고 이후 버전의 여러 라이브러리를 가져올 수있었습니다. 이것은 Linux에 있음을 유의하십시오.

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

0

마이크로 버전을 사용하면 pip가 인식하지 못하는 것 같습니다. 예를 들어 버전 1.9.9.1을 업그레이드 할 수 없습니다.


2
아마 SemVer 호환 '1.9.9.1'때문에, 참조 semver.org
tector

0

제 경우에는 사용 된 파이썬 버전 (3.4)이 Django 2.1 종속성 요구 사항 (python> = 3.5)을 충족하지 못했습니다.


0

제 경우에는 Artifactory에서 .tar.gz 패키지를 설치하여 많은 업데이트를 수행하고 있습니다. 캐시 된 Python 파일을 덮어 쓰고 항상 최신 파일을 가져 오거나 설치하기 위해 다음을 실행할 수 있습니다.

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

로컬 캐시를 사용하는 대신 필요한 파일을 다시 다운로드하고 설치해야합니다.


0

제 경우에는 누군가가 python2를 사용하여 최신 버전의 패키지를 게시 했으므로 python3으로 빌드 pip3 install된 이전 버전을 가져 왔습니다.

이것을 디버깅 할 때 확인해야 할 사항 :

  • pip install버전을 찾을 수 없다고 주장하는 경우 볼 수 있는지 pip search확인하십시오.
  • pypi 저장소의 "파일 다운로드"섹션을 살펴보십시오. 파일 이름이 무엇이 잘못되었는지를 암시 할 수 있습니다 (제 경우 -py2-에는 그날이 분명해졌습니다).
  • 다른 사람들이 제안했듯이 pip install --no-cache-dirpip가 이미 귀하의 답변을 로컬에 가지고 있기 때문에 인터넷에 질문하지 않는 경우 실행 해보 십시오.

0

pip install .다른 곳에서는 파일을 볼 수 없었음에도 불구하고 설치되는 PyCharm의 Git 탭 아래에 버전없는 파일을 숨겼 습니다.

나를 위해 그것을 찾는 데 오랜 시간이 걸렸고 다른 사람에게 도움이되기를 바라며 이것을 게시했습니다.


0

다른 사람이 torchtext (또는 다른 torch라이브러리) 를 업그레이드하는 데 어려움을 겪는 경우 :

https://pypi.org/project/torchtext/에 실행할 수 있다고 나와 있지만 aka 를 지정하여 pip install torchtext비슷한 방식으로 설치해야했습니다 .torch--find-links-f

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

나를 짜증나게 한 것은 PyCharm이 새 버전을 알려 주었지만 업그레이드를 시도 할 때 찾을 수 없다는 것입니다. 나는 PyCharm이 새로운 버전을 발견하기 위해 자체 메커니즘을 사용한다고 생각합니다. 그런 다음 내부에서 호출 할 때 옵션이 pip없는 새 버전을 찾지 못했습니다 --find-links.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.