최소 및 최대 버전 범위로 패키지를 설치하는 방법은 무엇입니까?


233

최소 버전 ( pip install package>=0.2)과 절대로 설치해서는 안되는 최대 버전 (이론적 API :) 으로 패키지를 설치하기 위해 pip, 특히 요구 사항 파일에서 pip를 알려주는 방법이 있는지 궁금합니다 pip install package<0.3.

적극적으로 개발중인 타사 라이브러리를 사용하고 있기 때문에 묻습니다. pip 요구 사항 파일에서 항상 0.5.x 지점의 최신 부 릴리스를 설치하도록 지정하고 싶지만 pip가 0.6.x와 같은 최신 주요 버전을 설치하려고하지 않습니다. API가 다릅니다. 0.6.x 브랜치를 사용할 수 있지만 개발자는 여전히 0.5.x 브랜치에 패치 및 버그 수정을 릴리스하므로 package==0.5.9요구 사항 파일에 정적 줄 을 사용하고 싶지 않기 때문에 이것은 중요 합니다.

그렇게 할 방법이 있습니까?

답변:


301

넌 할 수있어:

$ pip install "package>=0.2,<0.3"

그리고 pip버전을 가정하는 것은 적어도 0.2, 0.3 이하, 가장 일치를 찾습니다.

이것은 pip 요구 사항 파일 에도 적용됩니다 . PEP 440의 버전 지정자에 대한 자세한 내용을 참조하십시오 .


연결이 끊어졌습니다. 공식 문서는 여기에 있습니다 .
beatgammit

45
기록을 위해, 나는 "package>=0.2,<=0.3"많은 이해가되지 않는다고 생각합니다 : 0.2와 0.3.0 모두에 대해 괜찮을 것이지만 0.3의 버그 수정 릴리스가 아닌 것은 언제입니까? 생각 "package>=0.2,<0.3"은 말의 일반적인 경우 반영하기 때문에, 훨씬 더 좋은 예입니다 : "저에게 현재의 마이너 버전의 최신 버그 수정 자료를 제공하시기 바랍니다,하지만 내가하고 싶은 때문에 자동으로 마이너 버전으로 저를 업그레이드하지 마십시오 "나에게 영향을 미치는 기능적 변화가 없는지 확인하십시오."
Henrik Heimbuerger

이 답변이 마음에 들면 아래에서 Mortiz 답변을 좋아할 것입니다! 그것을 확인하십시오, ~=0.2이것보다 (imho) 더 나은 해결책입니다.
Brad Root

1
@BradRoot ~=0.2.1예를 들어, 무엇 을할지 분명하지 않습니다 . >=0.2,<0.3무슨 일이 일어나고 있는지 분명하기 때문에 in처럼 명시 적 인 것이 좋습니다.
Acumenus

@Acumenus는 요구 사항 형식의 속성과 버전 관리 방식을 이해하는 사람 ~=0.2.1이 요구 사항 파일에 쓰지 않습니다 . ~=접두사 의 단점이 아니라 사용자 오류 입니다.
브래드 루트

86

당신은 또한 사용할 수 있습니다 :

pip install package==0.5.*

더 일관성 있고 읽기 쉽습니다.


12
이것은 requirements.txtIMO 를 관리하는 훨씬 더 좋은 방법 입니다. package==1.*대신 package>=1.2pip를 사용 하면 pip가 패키지에 메이저 버전 2+를 설치하지 못하게되는데, 메이저 버전 변경은 종종 이전 버전과 호환되지 않기 때문에 바람직합니다.
Michael Hays

10
이것은 기존 패키지를 업그레이드하지 않습니다. 예를 들어 0.5.1이 설치되어 있지만 0.5.2가 최신이고 설치 0.5. *를 실행하면 "이미 만족"이라고 표시되고 0.5.1로 남겨집니다. --upgrade를 추가하면 문제가 해결됩니다.
scipilot

71

우아한 방법은 PEP 440~= 에 따라 호환 가능한 릴리스 연산자 를 사용하는 것 입니다. 귀하의 경우 이것은 다음과 같습니다.

package~=0.5.0

예를 들어, 다음 버전이 존재하면 다음을 선택합니다 0.5.9.

  • 0.5.0
  • 0.5.9
  • 0.6.0

설명을 위해 각 쌍은 동일합니다.

~= 0.5.0
>= 0.5.0, == 0.5.*

~= 0.5
>= 0.5, == 0.*

잘린 버전에 이것을 어떻게 사용 하시겠습니까? 예를 들면이 있는지 2.2와 계획된 미래 2.2.1, 것입니다 ~=2.2.*일치 2.2삼차 번호가없는에도 불구하고?
Mike 'Pomax'Kamermans

1
@ Mike'Pomax'Kamermans ~=2.2.0이 경우에 사용해야합니다 ( *연산자를 사용하면 작동하지 않습니다 ~=). 2.22.2.0(와 2.2.0.0이 패키지를 설치에 관해서, 그리고에 있도록) 내부적으로 같은 일로 처리됩니다.
ik1ne

예를 들어 중첩 버전 번호 매기기에 이것이 어떻게 작동하는지는 확실하지 않습니다 ~=1.2.3. 다중 절 형식을 대신 사용하는 것이 훨씬 명확하고 명확합니다.
Acumenus 오전

2
@MitchMcMabers 원하는 주요 기능이 해당 메이저 버전의 첫 번째 릴리스에 있었을 때만 작동합니다. 일반적으로 사실이 아닙니다. 예를 들어, v1.2.0에 추가 된 항목에 의존하는 경우 == 1.*v1.1.0을 잘못 수락합니다. ~=(또는 >=플러스 <당신은 열심히 읽는 찾을 경우)가 올바르게 특정되고 격려하기 때문에 운영자가 더 좋다.
Maxpm

1
@Maxpm 좋은 지적입니다. 그래서 == 1.*우리는 1.2 버전의 기능을하지만, 이미 1.1 설치 한 사용자가 필요로하는 경우 실패하고 아무것도하지 않는 것입니다. 귀하의 제안 ~= 1.2은 말 >= 1.2, < 2.0(또는 >= 1.2, == 1.*) 과 동일 합니다. 따라서 네가 맞습니다 ~=. 라이브러리에서 사용한 개발 버전을 대상으로 지정하고 동일한 주 버전 내에서 최신 버전을 허용 할 수 있기 때문에 최고의 연산자 입니다. 그 설명에 감사드립니다!
Mitch McMabers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.