문제

나는 이미 geoip2 패키지가 설치되었습니다.얼마 전에 설치했을 때 guzzle 3.*가 필요했기 때문에 guzzle 3.9.1을 종속 항목 중 하나로 설치했습니다.

이제 설치하고 싶습니다. 예측 패키지를 작성하여 작곡가.json에 추가했습니다.

"require": {
    ...
    ...
    "geoip2/geoip2": "0.6.*",
    "predictionio/predictionio": "~0.7.1"
}

문제는 예측 guzzle 3.8.0 또는 3.8.1이 필요하며 이미 설치된 3.9.1 버전을 허용하지 않습니다.

나는 믿는다 목구멍 3.8.0은 두 가지를 모두 만족시킵니다. geoip2 그리고 예측, 문제는 어떻게 다운그레이드할 수 있느냐는 것입니다. 목구멍, 명심하세요 목구멍 내 Composer.json에는 표시되지 않고 Composer.lock에만 표시됩니다.

아래는 내가 실행할 때의 출력입니다. composer update predictionio/predictionio

  Problem 1
    - Installation request for predictionio/predictionio ~0.7.1 -> satisfiable by predictionio/predictionio[v0.7.1].
    - Conclusion: remove guzzle/guzzle v3.9.1
    - predictionio/predictionio v0.7.1 requires guzzle/guzzle ~3.8.0 -> satisfiable by guzzle/guzzle[v3.8.0, v3.8.1].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.0].
    - Can only install one of: guzzle/guzzle[v3.9.1, v3.8.1].
    - Installation request for guzzle/guzzle == 3.9.1.0 -> satisfiable by guzzle/guzzle[v3.9.1].
도움이 되었습니까?

해결책

Guzzle을 추가할 필요는 없습니다. composer.json.새 패키지를 추가할 때 Guzzle을 업데이트하기만 하면 됩니다.(이렇게 하면 PredictionIO의 요구 사항에 맞게 Guzzle이 다운그레이드됩니다.)

간단히 실행

composer update predictionio/predictionio guzzle/guzzle

보시다시피 여러 패키지를 제공할 수 있습니다. composer update 공백으로 구분합니다.이에 대한 설명은 다음과 같습니다. 문서.

다른 팁

질문과 관련된 몇 가지 힌트:

실행하여 composer update named/package, 이 패키지를 추가하거나 버전을 높이는 것만 허용할 뿐 그 외에는 아무것도 허용하지 않습니다.같은 일이 일어날 것입니다 (단, 물건을 추가하는 것뿐입니다). composer require named/package:~1.0 (이것은 json 형식을 망칠 필요 없이 내용을 추가할 수 있는 좋은 방법입니다.)

물건을 업데이트할 때 가장 간단한 해결책은 다음을 실행하는 것입니다. composer update.패키지 이름이 없으면 모든 패키지가 업데이트될 수 있습니다.

소프트웨어 패키지를 신중하게 선택하지 않으면 모든 것을 업데이트하는 것이 약간 위험할 수 있습니다.개인적으로 저는 의미론적 버전 관리를 사용하는 것처럼 보이는 소프트웨어를 사용하는 것을 권장합니다. 이는 Composer에서 물결표 버전 요구 사항을 매우 효과적으로 사용할 수 있도록 해줍니다.모두가 사용해 보아야 한다고 말하고 싶습니다. ~X.Y 버전 설명에 따라 패치와 호환 업데이트를 모두 설치할 수 있기 때문입니다.

사용하는 라이브러리는 느슨하게 정의된 THEIR 종속성 버전을 충분히 허용해야 합니다.귀하의 예에서는 predictionio/predictionio 패키지가 필요합니다 guzzle/guzzle:~3.8.0 - 그렇게 해야 할 이유가 있을 수 있지만, 결과적으로 소프트웨어를 사용하려는 모든 사람이 Guzzle 3.8.0 또는 3.8.1을 사용하도록 강제합니다.Guzzle 관리자가 하위 호환성을 깨뜨릴지는 의심스럽습니다. 왜냐하면 그들은 작동할 것으로 예상되는 매우 중요하고 기본적인 소프트웨어를 만든다는 것을 알고 있기 때문입니다. 그럼에도 불구하고 문제가 발생하면 곧 버그 보고서를 받게 될 것이라고 생각합니다.제한 없이 호환 가능한 업데이트를 허용하기 위해 모든 라이브러리의 종속성을 확인하고 싶습니다.이 경우 ~3.8 훨씬 더 좋을 것입니다.

어떤 대가를 치르더라도 지점에 의존하지 마십시오.불가피하게 브랜치를 사용하는 경우 별칭 버전 번호를 할당하세요. require: { "named/package": "dev-master as 1.2.2" } 이전 릴리스에서 적절한 버전 번호를 추측할 수 없는 경우 0.0.0부터 시작하십시오.이렇게 하면 나중에 릴리스된 버전으로 전환할 수 있으며, 이는 나머지 버전 번호와 더 잘 통합됩니다.

특정 버전의 패키지를 설치하려면 간단히 이를 Composer.json에 추가하면 됩니다. 필요하다 부분:

    "guzzle/guzzle" : "3.8.0",

그런 다음

  composer update guzzle/guzzle
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top