Como instalo os pacotes do Composer PHP sem o Composer?

97

Estou tentando instalar a API Coinbase PHP, mas requer o Composer:

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

Estou procurando uma solução PHP universal (talvez uma função) para me permitir instalar pacotes composer diretamente em meu servidor, sem ter que usar o Composer.

Eu acho que os desenvolvedores do Composer acreditam que estão ajudando as pessoas, mas na verdade existem milhares de desenvolvedores iniciantes que estão sendo impedidos de aprender desenvolvimento web pela 'barreira do Composer'.

Realmente ajudaria se houvesse uma solução flexível ou alguma abordagem onde pudéssemos instalar sem o Composer? Como posso fazer isso?

Por favor, não responda com algum comentário sarcástico . Há pessoas que não querem usar o Composer e não vejo por que deveríamos ser agrupados em um software de terceiros específico para fazer desenvolvimento web.

Amy Neville
fonte
6
Todos os pacotes que usam o composer ainda são meros diretórios cheios de arquivos PHP. Você pode instalá-los exatamente da mesma maneira que fazia antes de o composer existir: copie-os em algum lugar e includeos arquivos.
deceze
2
A instalação baseada no Composer implica a execução de um único comando, que quase sempre é mostrado na página inicial do pacote. Eu entendo que há casos de uso para instalação manual, mas nunca será o método mais fácil.
Álvaro González
19
@ ÁlvaroGonzález Não poderia discordar mais do seu comentário. Consulte: okmaya.com/2016/03/13/package-managers-hate-npm-composer . Não estou dizendo que os gerenciadores de pacotes não são ótimos para algumas pessoas e projetos - apenas que eles geralmente requerem mais trabalho e esforço do que simplesmente soltar uma pasta em seu projeto e fazer referência a ela.
dallin
3
@dallin Apesar do título, esse artigo é principalmente um discurso retórico sobre frameworks e cadeias de ferramentas superexplicadas e modernas (um problema próprio). Se você deseja instalar uma biblioteca que por acaso tem 30 dependências, abandonar o Composer em favor de 30 instalações manuais pode fazer você se sentir mais viril ou algo assim, mas eu não diria que é mais fácil, muito menos para desenvolvedores iniciantes.
Álvaro González
9
@ ÁlvaroGonzález Para ser sincero, não tive que instalar uma biblioteca com 30 dependências (parece mal projetado tbh). Tenho certeza de que seria um pesadelo sem um gerenciador de pacotes. Porém, minhas experiências são semelhantes a esse artigo. Normalmente tento instalar algo com uma ou duas dependências e acabo tendo que gastar meu tempo resolvendo problemas com o gerenciador de pacotes antes mesmo de começar a codificar. Mensagens de erro são muito frequentes e incrivelmente vagas e esotéricas. Isso pode ilustrar melhor meus sentimentos: imgur.com/r/webdev/bO7oTf6 . Minhas experiências com PMs têm sido semelhantes.
dallin

Respostas:

38

O composer.jsonarquivo lista as dependências. No seu exemplo:

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

Você deve então encontrar os pacotes correspondentes no site packagist . Repita o mesmo processo para cada dependência: encontre dependências adicionais em seus composer.jsonarquivos correspondentes e pesquise novamente.

Quando você finalmente tiver uma lista completa dos pacotes necessários, você só precisa instalá-los um por um. Na maior parte, é apenas uma questão de soltar os arquivos em algum lugar do diretório do projeto. Mas você também deve garantir que o PHP possa encontrar as classes necessárias. Já que você não está usando o carregador automático do Composer, você precisa adicioná-los ao seu carregador automático personalizado. Você pode descobrir as informações dos respectivos composer.jsonarquivos, por exemplo:

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

Se você não usar um carregador automático de classe, precisará descobrir as require_onceinstruções individuais . Você provavelmente precisará de muitas tentativas e erros porque a maioria dos autores de bibliotecas não se importará em documentar isso.

Além disso, e apenas no caso de haver confusão sobre isso:

  • O Composer possui um instalador GUI oficial para Windows e um procedimento de instalação de linha de comando para copiar e colar para todas as plataformas.
  • O Composer pode ser executado localmente e sua saída apenas carregada em outro lugar. Você não precisa de SSH em sua hospedagem compartilhada.
  • O comando necessário para instalar uma biblioteca pode ser copiado e colado do site do pacote - mesmo que o mantenedor do pacote não se importe em documentá-lo, packagist.org o gera por padrão.

O Composer não é perfeito e não se adapta a todos os casos de uso, mas, quando se trata de instalar uma biblioteca que dependa dele, é sem dúvida a melhor alternativa e é bastante decente.


Verifiquei outras respostas que vieram depois da minha. Eles se enquadram principalmente em duas categorias:

  1. Instale uma biblioteca e escreva um script de download personalizado com ela
  2. Use uma interface online baseada na web para o Composer

A menos que esteja faltando alguma coisa, nenhum deles atende às reclamações expressas pelo OP:

  • Curva de aprendizado
  • Uso de software de terceiros
  • Possibilidade de desenvolver diretamente no servidor (usando SSH, presumo)
  • Árvore de dependência potencialmente profunda
Álvaro González
fonte
23
Se isso não convencer todos a usar apenas o compositor, nada irá ...
deceze
3
Em primeiro lugar, a versão atual do composer precisa de proc_open () que não está disponível em todos os lugares. E também existem outros problemas. Embora eu concorde que o compositor tem seus méritos, sempre soube que um dia teria um problema, e foi esse. Ainda não descobri como instalar uma biblioteca compartilhada para mais de 50 aplicativos cliente (usando o Composer).
Karvonen
7
Eu gostaria que os desenvolvedores de bibliotecas parassem de usar o composer. É um impedimento em qualquer ambiente de produção sério. Pessoas que se escondem atrás de 'apenas use o compositor' não têm idéia do que estão fazendo em primeiro lugar.
IncredibleHat
108

Você pode tentar https://php-download.com/, que pode ajudá-lo a baixar todas as dependências na maioria das vezes junto com a vendorpasta. Ele promete compositor não obrigatório. Tentei sozinho. Ele encontra e cria todas as pastas necessárias e as compacta para download. Funciona perfeitamente !!

jahajee.com
fonte
4
Funcionando perfeitamente! Obrigado !!
Yousphere
23
Esta deve ser a resposta aceita. Ele apenas faz o que o composer faz e retorna um
Ele não tem todas as bibliotecas do github. Quando tento usar este, por exemplo: github.com/mgp25/Instagram-API, ele diz que não consegue encontrar.
Andi Hamolli
3
A resposta acima mostra muitas etapas a serem seguidas enquanto o site facilita para 1 etapas para download. Não sou um programador profissionalmente, mas o PHP me permite fazer coisas insanas com tanta facilidade que nunca precisei aprender SSH ou compositor ou pacote .... Esses são feitos para geeks e profissionais .... O site removeu essa limitação .. ... Acredito que todos aqueles que votaram positivamente em minha resposta acham que o site faz melhor do que o compositor ... Se você puder fazer isso ... Ele ajudará todos os programadores não
geeks
4
@ ÁlvaroGonzález. Pessoalmente, não me importo se o compositor compila um projeto em alguma outra máquina. Simplesmente não tenho privilégios de instalação em todas as máquinas em que trabalho e, às vezes, preciso obter uma biblioteca em uma máquina Windows sem executar um arquivo exe. Eu aprecio o compositor, simplesmente não consigo usá-lo sempre, o que era frustrante sem este site para pré-compilar para mim.
Altimus Prime de
9

Estou usando hospedagem compartilhada para um site e não consigo executar comandos nele. Além de executar o composer via solicitação de script php que eu solicito via navegador, geralmente uso este fluxo de trabalho:

  • Certifique-se de ter o php instalado localmente.
  • Crie um diretório no desktop.
  • baixe composer.phar em https://getcomposer.org/download/ (sob o cabeçalho * Download manual ) e coloque-o no diretório.
  • faça um arquivo composer.json cole nele o seguinte conteúdo

     {
         "require": {
             "coinbase/coinbase": "~2.0"
         }
     }
  • Navegue até o diretório com o shell de sua escolha (bash, git-bash, cmd, windows bash)

  • tipo php composer.phar update captura de tela da saída do bash
  • Faça upload do diretório do fornecedor para o seu servidor web via ftp ou qualquer mecanismo que você use.
  • inclua em seu projeto php onde você carrega suas bibliotecas (modifique o caminho para onde você carregou o diretório do fornecedor para que ele inclua o arquivo de carregamento automático)

    require_once('vendor/autoload.php');

Desta forma, você obtém o benefício do gerenciamento de dependências e não precisa incluir manualmente todos os zilhões de arquivos e baixar todas as dependências manualmente, e atualizá-los é tão fácil quanto digitar php composer.phar updatee, em seguida, substituir o diretório do fornecedor em seu servidor pelo novo.

Tschallacka
fonte
4

Tive que fazer isso para um servidor FTP ao qual não tinha acesso SSH. O site listado aqui funcionou, então percebi que você pode simplesmente fazer uma instalação do composer em seu próprio servidor (usando a versão PHP de seu destino) e, em seguida, copiar todos os arquivos.

Adam Thompson
fonte
1
Essa deve ser a resposta. Funcionou perfeitamente para mim,
Michael Walter
1
Você pode explicar melhor sua resposta? Desculpe pela minha estupidez.
Andi Hamolli
1
@IchHabsDrauf Basicamente, ele usa o composer (nesta parte, não é realmente o anwser) e depois copia os arquivos para o ambiente de produção. Meu comentário sobre isso seria que talvez haja pessoas sem compositor no ambiente de desenvolvimento também, portanto, isso não é realmente uma resposta.
Gall Annonim
3

Esta não é a solução definitiva, mas para mim foi uma grande ajuda na maioria dos casos: https://github.com/Wilkins/composer-file-loader

Permite que você carregue o arquivo composer.json exatamente como o composer faria. Isso permite que você carregue o arquivo composer.json sem o composer (então, teoricamente, PHP 5.2 é suficiente)

Sei que a pergunta é antiga, mas espero que ajude alguém.

Helderk
fonte
1

Uma solução alternativa que funcionou para mim (já que o php-download estava fora do ar) pode ser feita fazendo seu próprio pequeno downloader do compositor local.

  1. Baixe e instale o XAMPP localmente: https://www.apachefriends.org/index.html
  2. Baixe e instale o composer localmente: https://getcomposer.org/download/
  3. Abra o prompt de comando, navegue para dizer c:\tempe simplesmente digite a dependência do compositor, por exemplo:composer require league/oauth2-client
  4. Copie os arquivos de sua c:\temppasta para seu host da web usando um programa de FTP
  5. Adicione isso ao topo do seu php: require("vendor/autoload.php");
jsmars
fonte
Funcionou como um encanto! Obrigado por isso :)
ajmeese7