Jak zainstalować pakiety PHP Composer bez Composera?

103

Próbuję zainstalować Coinbase PHP API, ale wymaga to Composera:

https://github.com/coinbase/coinbase-php

Szukam uniwersalnego rozwiązania PHP (być może funkcji), które pozwoliłoby mi zainstalować pakiety kompozytora bezpośrednio na moim serwerze, bez konieczności używania Composera.

Myślę, że programiści Composera uważają, że pomagają ludziom, ale w rzeczywistości są tysiące początkujących programistów, którzy nie mogą uczyć się tworzenia stron internetowych z powodu „bariery Composera”.

Naprawdę pomogłoby, gdyby istniało elastyczne rozwiązanie lub podejście, w którym moglibyśmy zainstalować bez Composera? Jak mogę to zrobić?

Proszę nie odpowiadać sarkastycznym komentarzem . Są ludzie, którzy nie chcą używać Composera i nie widzę powodu, dla którego powinniśmy być wciągnięci do konkretnego oprogramowania innej firmy w celu tworzenia stron internetowych.

Amy Neville
źródło
6
Wszystkie pakiety korzystające z narzędzia Composer to nadal zwykłe katalogi pełne plików PHP. Możesz je zainstalować dokładnie w taki sam sposób, jak przed istnieniem kompozytora: skopiuj je gdzieś i includepliki.
deceze
2
Instalacja oparta na komponencie wymaga uruchomienia jednego polecenia, które prawie zawsze jest wyświetlane na stronie głównej pakietu. Rozumiem, że istnieją przypadki użycia instalacji ręcznej, ale nigdy nie będzie to łatwiejsza metoda.
Álvaro González
21
@ ÁlvaroGonzález Nie mogę się bardziej nie zgodzić z twoim komentarzem. Zobacz: okmaya.com/2016/03/13/package-managers-hate-npm-composer . Nie mówię, że menedżerowie pakietów nie są świetni dla niektórych osób i projektów - po prostu często wymagają więcej pracy i wysiłku niż po prostu upuszczenie folderu w projekcie i odwołanie się do niego.
dallin
3
@dallin Pomimo tytułu, ten artykuł jest głównie rantem na temat nowoczesnych, nadmiernie zaprojektowanych frameworków i łańcuchów narzędzi (sam problem). Jeśli chcesz zainstalować bibliotekę, która ma 30 zależności, zrzucenie Composera na rzecz 30 ręcznych instalacji może sprawić, że poczujesz się bardziej męski lub cokolwiek innego, ale nie nazwałbym tego łatwiejszym, a tym bardziej dla początkujących programistów.
Álvaro González
9
@ ÁlvaroGonzález Szczerze mówiąc, nie musiałem instalować biblioteki z 30 zależnościami (brzmi źle zaprojektowana tbh). Jestem pewien, że bez menedżera paczek byłby to koszmar. Moje doświadczenia są jednak podobne do tego artykułu. Zwykle próbuję zainstalować coś z jedną lub dwiema zależnościami i kończy się to, że muszę spędzać czas na rozwiązywaniu problemów z menedżerem pakietów, zanim jeszcze zacznę kodować. Komunikaty o błędach są zbyt częste i niesamowicie niejasne i ezoteryczne. To może lepiej zilustrować moje odczucia: imgur.com/r/webdev/bO7oTf6 . Moje doświadczenia z PM były podobne.
dallin

Odpowiedzi:

38

composer.jsonPlik zawiera listę zależności. W twoim przykładzie:

"require": {
    "php": ">=5.5.0",
    "guzzlehttp/guzzle": "^6.0",
    "psr/http-message": "^1.0",
    "psr/log": "^1.0"
},

Następnie musisz znaleźć odpowiednie pakiety w witrynie packagist . Powtórz ten sam proces dla każdej zależności: znajdź dodatkowe zależności w odpowiednichcomposer.json plikach i wyszukaj ponownie.

Kiedy w końcu będziesz mieć pełną listę wymaganych pakietów, wystarczy zainstalować je wszystkie jeden po drugim. W większości jest to po prostu kwestia upuszczenia plików gdzieś w katalogu projektu. Ale musisz także upewnić się, że PHP może znaleźć potrzebne klasy. Ponieważ nie używasz automatycznego ładowania programu Composer, musisz dodać je do własnego, niestandardowego autoloadera. Możesz znaleźć informacje z odpowiednich composer.jsonplików, np .:

"autoload": {
    "psr-4": { "Coinbase\\Wallet\\": "src/" }
},

Jeśli nie używasz automatycznego programu ładującego klasy, musisz określić osobę require_once instrukcje. Prawdopodobnie będziesz potrzebować wielu prób i błędów, ponieważ większość autorów bibliotek nie będzie się starać tego dokumentować.

Ponadto, na wypadek gdyby było zamieszanie w tej sprawie:

  • Composer ma oficjalny instalator GUI dla systemu Windows oraz procedurę kopiowania i wklejania z wiersza poleceń dla wszystkich platform.
  • Composer można uruchomić lokalnie, a jego dane wyjściowe można po prostu przesłać gdzie indziej. Nie potrzebujesz SSH w swoim hostingu współdzielonym.
  • Polecenie potrzebne do zainstalowania biblioteki można skopiować i wkleić ze strony internetowej pakietu - nawet jeśli opiekun pakietu nie chciał go udokumentować, packagist.org generuje ją domyślnie.

Composer nie jest doskonały i nie pasuje do wszystkich przypadków użycia, ale jeśli chodzi o instalację biblioteki, która na nim polega, jest to niewątpliwie najlepsza alternatywa i całkiem przyzwoita.


Sprawdziłem inne odpowiedzi, które pojawiły się po mojej. Najczęściej dzielą się na dwie kategorie:

  1. Zainstaluj bibliotekę i napisz z nią niestandardowy skrypt pobierania
  2. Użyj internetowego interfejsu internetowego dla Composera

O ile czegoś nie brakuje, żadna z nich nie odnosi się do skarg wyrażonych przez PO:

  • Krzywa uczenia się
  • Korzystanie z oprogramowania stron trzecich
  • Możliwość programowania bezpośrednio na serwerze (zakładam, że używając SSH)
  • Potencjalnie głębokie drzewo zależności
Álvaro González
źródło
27
Jeśli to nie przekona wszystkich do korzystania po prostu z kompozytora, nic nie…
zamrozi
3
Przede wszystkim obecna wersja kompozytora wymaga proc_open (), która nie jest dostępna wszędzie. Są też inne problemy. Chociaż zgadzam się, że kompozytor ma swoje zalety, zawsze wiedziałem, że pewnego dnia napotkam problem i to było to. Nie wiem jeszcze, jak zainstalować bibliotekę współdzieloną dla ponad 50 aplikacji klienckich (używając Composera).
karvonen
8
Chciałbym, żeby twórcy bibliotek przestali używać kompozytora. To nie do przejścia w każdym poważnym środowisku produkcyjnym. Osoby, które chowają się za „po prostu użyj kompozytora”, nie mają pojęcia, co robią.
IncredibleHat
115

Możesz wypróbować https://php-download.com/, który pomoże ci pobrać wszystkie zależności przez większość czasu wraz z vendorfolderem. Obiecuje, że kompozytor nie jest wymagany. Sam to wypróbowałem. Znajduje i tworzy wszystkie wymagane foldery i zamyka je w celu pobrania. Działa świetnie !!

jahajee.com
źródło
4
Działa idealnie! Dzięki !!
Yousphere
25
To powinna być akceptowana odpowiedź. Po prostu robi to, co robi kompozytor, a następnie zwraca plik zip
Nie ma wszystkich bibliotek z github. Kiedy próbuję użyć tego, na przykład: github.com/mgp25/Instagram-API , mówi, że nie może go znaleźć.
Andi Hamolli
3
Powyższa odpowiedź mówi o tak wielu krokach do wykonania, podczas gdy witryna upraszcza ją do 1 kroków do pobrania. Nie jestem programistą zawodowo, ale PHP pozwala mi robić szalone rzeczy tak łatwo, że nigdy nie musiałem uczyć się SSH, kompozytora lub pakietu… Są one przeznaczone dla maniaków i profesjonalistów… Witryna usunęła to ograniczenie… ... Wierzę, że wszyscy, którzy głosowali za moją odpowiedzią, uważają, że witryna robi to lepiej niż kompozytor ..... Jeśli możesz to zrobić .... To pomoże wszystkim programistom, którzy nie są
maniakami
4
@ ÁlvaroGonzález. Osobiście nie obchodzi mnie, czy kompozytor kompiluje projekt na innej maszynie. Po prostu nie mam uprawnień do instalacji na wszystkich komputerach, na których pracuję, i czasami potrzebuję biblioteki na komputerze z systemem Windows bez uruchamiania pliku exe. Doceniam kompozytora, po prostu nie mogę go zawsze używać, co było frustrujące bez prekompilacji tej witryny.
Altimus Prime
9

Używam hostingu współdzielonego dla witryny internetowej i nie mogę tam wykonywać poleceń. Oprócz uruchamiania programu Composer za pośrednictwem żądania skryptu php, które żądam za pośrednictwem przeglądarki, zwykle używam tego przepływu pracy:

  • Upewnij się, że masz zainstalowane lokalnie php.
  • Utwórz katalog na pulpicie.
  • pobierz plik composer.phar z https://getcomposer.org/download/ (pod nagłówkiem * Pobieranie ręczne ) i umieść go w katalogu.
  • zrób plik composer.json wklej w nim następującą zawartość

     {
         "require": {
             "coinbase/coinbase": "~2.0"
         }
     }
    
  • Przejdź do katalogu z wybraną powłoką (bash, git-bash, cmd, windows bash)

  • rodzaj php composer.phar update zrzut ekranu wyjścia bash
  • Prześlij katalog dostawcy na swój serwer sieciowy za pośrednictwem ftp lub innego mechanizmu, którego używasz.
  • uwzględnij w swoim projekcie php miejsce, w którym ładujesz swoje biblioteki (zmień ścieżkę do miejsca, w którym załadowałeś katalog dostawcy, aby zawierał ten plik automatycznego ładowania)

    require_once('vendor/autoload.php');
    

W ten sposób uzyskujesz korzyści z zarządzania zależnościami i nie musisz ręcznie włączać wszystkich gazylionów plików i ręcznie pobierać wszystkich zależności, a aktualizowanie ich jest tak proste, jak wpisywanie, php composer.phar updatea następnie zastępowanie katalogu dostawcy na serwerze nowy.

Tschallacka
źródło
4

Musiałem to zrobić dla serwera FTP, do którego nie miałem dostępu SSH. Witryna wymieniona tutaj działała, a potem zdałem sobie sprawę, że możesz po prostu zainstalować kompozytor na własnym serwerze (używając wersji PHP twojego celu), a następnie skopiować wszystkie pliki.

Adam Thompson
źródło
1
To powinna być odpowiedź. Pracowało dla mnie idealnie
Michael Walter
1
Czy możesz lepiej wyjaśnić swoją odpowiedź? Przepraszam za moją głupotę.
Andi Hamolli
1
@IchHabsDrauf Zasadniczo chodzi o użycie kompozytora (w tej części nie jest to tak naprawdę anwser), a następnie skopiowanie plików do środowiska produkcyjnego. Mój komentarz do tego byłby taki, że być może są ludzie bez kompozytora również w środowisku deweloperskim, więc tak naprawdę nie jest to odpowiedź.
Gall Annonim
3

To nie jest ostateczne rozwiązanie, ale dla mnie było to bardzo pomocne w większości przypadków: https://github.com/Wilkins/composer-file-loader

Umożliwiają załadowanie pliku composer.json w taki sam sposób, jak zrobiłby to kompozytor. Pozwala to na załadowanie pliku composer.json bez kompozytora (więc teoretycznie wystarczy PHP 5.2)

Wiem, że to stare pytanie, ale mam nadzieję, że komuś pomoże.

holderk
źródło
1

Alternatywne rozwiązanie, które zadziałało dla mnie (ponieważ php-download przestało działać) można zrobić, tworząc własny mały lokalny program do pobierania kompozytorów.

  1. Pobierz i zainstaluj XAMPP lokalnie: https://www.apachefriends.org/index.html
  2. Pobierz i zainstaluj program Composer lokalnie: https://getcomposer.org/download/
  3. Otwórz polecenie, przejdź do polecenia c:\tempi po prostu wpisz zależność kompozytora, na przykład:composer require league/oauth2-client
  4. Skopiuj pliki z c:\tempfolderu do hosta internetowego za pomocą programu FTP
  5. Dodaj to na początku swojego php: require("vendor/autoload.php");
jsmars
źródło
Działał jak urok! Dzięki za to :)
Aaron Meese