Làm cách nào để giải quyết lỗi “Không thể giải quyết các yêu cầu của bạn đối với một tập hợp các gói có thể cài đặt”?


84

Khi tôi chạy, composer updatetôi nhận được một số đầu ra có dây.

nhập mô tả hình ảnh ở đây

Đây là nhà soạn nhạc của tôi trông như thế nào.

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.", "keywords": ["framework", "laravel"],
    "license": "MIT",
    "repositories": [{
        "type": "vcs",
        "url": "https://github.com/Zizaco/ardent.git"
    }],
    "require-dev": {
        "phpunit/phpunit": "4.3.*"
    },
    "require": {
        "laravel/framework": "4.2.*", 
        "laravelbook/ardent": "dev-master as 2.4.0", 
        "zizaco/entrust": "dev-master", 
        "sebklaus/profiler": "dev-master", 
        "doctrine/dbal": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations", "app/database/seeds", "app/tests",
            "app/libraries"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled", 
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

Làm cách nào để khắc phục điều đó?


8
Này, vui lòng trao đổi hình ảnh composer.json với nội dung văn bản của composer.json. Điều này cho phép sự cố sao chép và chỉnh sửa tệp đó để giúp bạn. Cảm ơn.
Jens A. Koch

2
@ JensA.Koch. Tôi ước gì tôi có thể làm được, đó là điều tôi định làm trong đầu. StackOverflow ngăn tôi đăng nhiều mã cho những người có đại diện thấp như tôi. Tôi xin lỗi các bạn - Tôi ước mình không bị hạn chế đó.
cyber8200

3
À, đúng rồi. Lỗi của tôi, đã không tính đến điểm của bạn. Sẽ ủng hộ để bạn nhận được nhiều hơn nữa ...
Jens A. Koch

Câu trả lời:


40

Phần phụ thuộc phần mềm của bạn có xung đột phiên bản không tương thích.

Đồng thời, bạn muốn cài đặt bất kỳ phiên bản Laravel 4.2.x nào và "zizaco / trust" từ nhánh chính của nó. Và nhánh chính đó yêu cầu ít nhất Laravel 5.0 (nói đại khái).

Vấn đề đến từ sự phụ thuộc vào các nhánh. Có khả năng gói zizaco / trust từng sử dụng Laravel 4.2 trong nhánh chính của nó và bạn có thể cài đặt các gói phụ thuộc của mình vào ngày hôm đó. Nhưng ngay thời điểm nhánh này được cập nhật với yêu cầu phiên bản không tương thích, bạn sẽ không bao giờ có thể chạy composer updatevà nhận các phụ thuộc được cập nhật.

Luôn sử dụng các phiên bản được gắn thẻ! Tốt nhất là bạn sử dụng yêu cầu phiên bản thoải mái cho phép cập nhật tương thích. Điều này phải được thể hiện dưới dạng yêu cầu phiên bản có dấu ngã-hai số: ~1.2sẽ cài đặt phiên bản 1.2.0 trở lên (như 1.2.99 hoặc 1.2.100) và cả 1.3 trở lên. Nếu bạn cần một bản vá nhất định: Phiên bản Caret-three-number ^1.2.10sẽ cài đặt 1.2.10 trở lên, cũng có thể là 1.3 trở lên.

Việc sử dụng yêu cầu phiên bản này thay vì dev-mastersẽ cho phép bạn sử dụng các phiên bản đã phát hành thay vì trạng thái không ổn định trong nhánh chính và cho phép bạn giải quyết phiên bản mới nhất vẫn hoạt động với Laravel 4.2. Tôi đoán đó sẽ là zizaco / phiên bản ủy thác 1.3.0, nhưng phiên bản 1.2 cũng sẽ đủ điều kiện. Đi với "zizaco/entrust": "~1.2".


7
Câu trả lời chính bài này là"zizaco/entrust": "~1.2"
cyber8200

Sẽ rất hữu ích nếu biết phần nào của thông báo lỗi khiến bạn nghĩ rằng đó Laravel 5.0là yêu cầu của zizaco/entrust.
lượng

Chà, nếu tôi nhớ không nhầm thì tôi đã xem thư viện được đề cập và thấy các yêu cầu trong đó là composer.json. Và tôi có thể đã diễn giải những gì tôi thấy vì không có yêu cầu rõ ràng, nhưng một số thành phần của nó. Trong thông báo lỗi, bạn thấy điều đó illuminate/support ^5.0được yêu cầu bởi zizaco/entrustvà nếu bạn biết rằng "Laravel" và "Illuminate" về cơ bản là giống nhau, thì kết luận sẽ đúng.
Sven


40

Tôi đang phải đối mặt với vấn đề tương tự. Tôi đang sử dụng khung dịch vụ vi mô 'Lumen'. Gần đây tôi đã giải quyết vấn đề tương tự bằng cách cài đặt hai gói: -

  1. sudo apt-get install php7.0-mbstring ,
  2. sudo apt-get install php7.0-xml hoặc sudo apt-get install php-xml

Sau khi cài đặt, bạn cần thực hiện lệnh này: - Cập nhật trình soạn nhạc

Hy vọng, nó sẽ giải quyết vấn đề. Tôi làm việc trên hệ thống của mình.


Mọi người không bao giờ nên sử dụng cập nhật nhà soạn nhạc trong sản xuất, điều này có thể gây ra sự cố. composer install là lệnh phù hợp để cài đặt. Tôi phản đối bạn nhưng tôi ủng hộ vì 1 và 2 đúng.
Marcelo Agimóvel, 13:18

Trong tình huống của tôi, cài đặt php-gd đã thực hiện thủ thuật. Nhà soạn nhạc đã không đề cập đến điều này ở bất kỳ đâu trong đầu ra lỗi ngay cả khi cờ tiết (-vvv) được bật.
Brad

1
Tôi đang làm việc trên Ubuntu 20.04. Chỉ chạy lệnh này là đủ:sudo apt-get install php-xml
Loïch

8

Những người đó có dev-masterđược thêm tự động không? Tránh chúng như những ràng buộc phiên bản không cần thiết, để sử dụng 'bất kỳ phiên bản phù hợp nào' "*"hoặc "@dev"nếu bạn không bận tâm đến các gói dev. Tôi đoán rằng Entrust là kẻ gây rối tiềm tàng.

Ngoài ra, "minimum-stability": "stable"áp đặt các ràng buộc bổ sung và

"minimum-stability": "dev",
"prefer-stable": true

không có xung đột hơn, coi đó là quy tắc ngón tay cái.


Vấn đề là việc sử dụng các phiên bản dev không ổn định. Cho phép chúng một cách mù quáng (ngay cả khi thích ổn định hơn) là chìa khóa của một mớ hỗn độn không thể giải thích được.
Sven

@Sven Câu trả lời giải quyết vấn đề trực tiếp, đó là dev-masterhạn chế. Nó không nói rằng các ràng buộc phiên bản lỏng lẻo là tốt - chúng có thể sẽ dẫn đến một mớ hỗn độn và điều này là do lương tâm của nhà phát triển. Thực tế là câu trả lời không kiên định về việc gắn thẻ không làm cho nó sai. Nhân tiện, tôi cảm ơn vì đã ủng hộ. Đó là khá đạo đức để từ chối các câu trả lời lân cận.
Estus Flask

Tôi đồng ý câu trả lời này là đúng dựa trên những gì đã được hỏi. Nó cũng làm việc cho tôi. Đã bình chọn!
tmarois,

2

Tôi đã giải quyết cùng một vấn đề đặt 'laravel/framework'phiên bản phụ thuộc từ "^8.0"sang "^7.0".

Sau đó hoạt động composer update --ignore-platform-reqsđơn giản

nhà soạn nhạc.json


Tính đến hôm nay, phiên bản khung Laravel mới nhất là 7.10. Vậy làm thế nào mà chỉ số phụ thuộc của bạn lại tăng lên 8.0?
Digvijay

không chắc chắn một cách trung thực vì tôi khá mới với Laravel. Đó là một bản cài đặt hoàn toàn mới với sự xáo trộn với tệp composer.json
nicolasDevDes

1

Thêm "barryvdh/laravel-cors": "^0.7.3"vào cuối requiremảng bên trong composer.json

Lưu composer.json và chạy composer update

Bạn xong việc rồi !


2
Mọi người không bao giờ nên sử dụng bản cập nhật trình soạn nhạc để cài đặt các phụ thuộc. Nó nên sử dụng cài đặt trình soạn nhạc. Bản cập nhật trình soạn nhạc sẽ cập nhật tất cả các phần phụ thuộc và điều đó có thể là thảm họa.
Marcelo Agimóvel

0

Tôi gặp sự cố này trong Laravel 5.8, những gì tôi đã làm là thực hiện composer requirecho từng thư viện và tất cả những nơi được cài đặt chính xác.

Như vậy:

thay vì thêm nó vào tệp composer.json hoặc chỉ định một phiên bản:

composer require msurguy/honeypot: dev-master

Thay vào đó, tôi đã làm mà không chỉ định bất kỳ phiên bản nào:

composer require msurguy/honeypot

Tôi hy vọng nó sẽ giúp, cảm ơn



0

Tôi đã giải quyết lỗi tương tự, bằng cách thêm "zizaco/entrust": "*"thay vì "zizaco/entrust": "~1.2".


-1

NGUYÊN NHÂN:

Lỗi đang xảy ra vì thư mục dự án của bạn thuộc sở hữu của người dùng root.

GIẢI PHÁP

Thay đổi quyền sở hữu cho người dùng hiện đã đăng nhập chứ không phải người dùng root. Nếu bạn chỉ có quyền root với tư cách là người dùng duy nhất, hãy tạo một người dùng khác có đặc quyền root.

$ sudo chown -R current_user / my / project / directory /

sau đó

cài đặt $ composer


-7

Chỉ cần kích hoạt curl trong tệp php.ini

;extension=php_curl.dll

đến

extension=php_curl.dll

và sau đó cài đặt nhà soạn nhạc


Tôi không chắc việc kích hoạt php_curl.dll sẽ làm gì đối với phiên bản không khớp (Laravel 4.x so với Laravel 5.x). Bạn có thể giải thích làm thế nào điều này sẽ giải quyết câu hỏi?
Chris Forrence 13/07/17

Tôi đang gặp sự cố được mô tả ở trên, vì vậy tôi đã kích hoạt cuộn tóc và sự cố đã được giải quyết. Tôi tin rằng nhà soạn nhạc hoặc laravel sử dụng phần mở rộng php này để tải xuống các gói. Trong trường hợp của tôi, nó sẽ không hoàn toàn không tương thích với các gói laravel, mà chỉ là một khó khăn cho người soạn thảo khi tải xuống các gói.
Gideao 14/07/17
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.