¿Cómo instalo paquetes PHP de Composer sin Composer?

97

Estoy tratando de instalar la API PHP de Coinbase pero requiere Composer:

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

Estoy buscando una solución PHP universal (quizás una función) que me permita instalar paquetes de composer directamente en mi servidor, sin tener que usar Composer.

Creo que los desarrolladores de Composer creen que están ayudando a la gente, pero en realidad hay miles de desarrolladores principiantes a los que la 'barrera del Composer' les impide aprender desarrollo web.

¿Realmente ayudaría si hubiera una solución flexible o algún enfoque donde pudiéramos instalar sin Composer? ¿Cómo puedo hacer esto?

Por favor, no responda con comentarios sarcásticos . Hay personas que no quieren usar Composer y no veo por qué deberíamos ser agrupados en un software específico de terceros para hacer desarrollo web.

Amy Neville
fuente
6
Todos los paquetes que utilizan Composer siguen siendo meros directorios llenos de archivos PHP. Puede instalarlos exactamente de la misma manera que lo hizo antes de que existiera composer: cópielos en algún lugar y includelos archivos.
diciembre
2
La instalación basada en Composer implica ejecutar un solo comando, que casi siempre se muestra en la página de inicio del paquete. Entiendo que hay casos de uso para la instalación manual, pero nunca será el método más fácil.
Álvaro González
19
@ ÁlvaroGonzález No podría estar más en desacuerdo con tu comentario. Consulte: okmaya.com/2016/03/13/package-managers-hate-npm-composer . No estoy diciendo que los administradores de paquetes no sean excelentes para algunas personas y proyectos, solo que a menudo requieren más trabajo y esfuerzo que simplemente colocar una carpeta en su proyecto y hacer referencia a ella.
dallin
3
@dallin A pesar del título, ese artículo es principalmente una perorata sobre las cadenas de herramientas y los frameworks modernos sobre-diseñados (un problema en sí mismo). Si desea instalar una biblioteca que tiene 30 dependencias, deshacerse de Composer a favor de 30 instalaciones manuales puede hacer que se sienta más varonil o lo que sea, pero no lo llamaría más fácil, y mucho menos para los desarrolladores principiantes.
Álvaro González
9
@ ÁlvaroGonzález Para ser honesto, no he tenido que instalar una biblioteca con 30 dependencias (suena mal diseñado, tbh). Estoy seguro de que sería una pesadilla sin un administrador de paquetes. Sin embargo, mis experiencias son similares a ese artículo. Por lo general, trato de instalar algo con una o dos dependencias y termino teniendo que dedicar mi tiempo a solucionar los problemas con el administrador de paquetes antes de comenzar a codificar. Los mensajes de error son demasiado frecuentes e increíblemente vagos y esotéricos. Esto podría ilustrar mejor mis sentimientos: imgur.com/r/webdev/bO7oTf6 . Mis experiencias con los PM han sido similares.
dallin

Respuestas:

38

El composer.jsonarchivo enumera las dependencias. En tu ejemplo:

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

A continuación, debe encontrar los paquetes correspondientes en el sitio de packagist . Repita el mismo proceso para cada dependencia: busque dependencias adicionales en sus composer.jsonarchivos correspondientes y busque nuevamente.

Cuando finalmente tenga una lista completa de los paquetes requeridos, solo necesita instalarlos todos uno por uno. En su mayor parte, es solo una cuestión de colocar los archivos en algún lugar del directorio de su proyecto. Pero también debe asegurarse de que PHP pueda encontrar las clases necesarias. Como no está utilizando el cargador automático de Composer, debe agregarlos a su propio cargador automático personalizado. Puede averiguar la información de los composer.jsonarchivos respectivos , por ejemplo:

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

Si no usa un cargador automático de clases, deberá averiguar las require_oncedeclaraciones individuales . Probablemente necesite mucha prueba y error porque a la mayoría de los autores de bibliotecas no les importará documentar eso.

Además, y en caso de que haya confusión sobre esto:

  • Composer tiene un instalador GUI oficial para Windows y un procedimiento de instalación de línea de comandos para copiar y pegar para todas las plataformas.
  • Composer se puede ejecutar localmente y su salida se puede cargar en otro lugar. No necesita SSH en su alojamiento compartido.
  • El comando necesario para instalar una biblioteca se puede copiar y pegar desde el sitio web del paquete; incluso si el encargado del paquete no se preocupó de documentarlo, packagist.org lo genera de forma predeterminada.

Composer no es perfecto y no se adapta a todos los casos de uso pero, cuando se trata de instalar una biblioteca que se base en él, sin duda es la mejor alternativa y es bastante decente.


Revisé otras respuestas que vinieron después de la mía. En su mayoría se dividen en dos categorías:

  1. Instale una biblioteca y escriba un script de descarga personalizado con ella
  2. Utilice una interfaz web en línea para Composer

A menos que me falte algo, ninguno de ellos aborda las quejas expresadas por el OP:

  • Curva de aprendizaje
  • Uso de software de terceros
  • Posibilidad de desarrollar directamente en el servidor (usando SSH, supongo)
  • Árbol de dependencia potencialmente profunda
Álvaro González
fuente
23
Si esto no convence a todo el mundo de usar el compositor, nada lo hará…
deceze
3
En primer lugar, la versión actual de composer necesita proc_open () que no está disponible en todas partes. Y también hay otros problemas. Si bien estoy de acuerdo en que el compositor tiene sus méritos, siempre he sabido que algún día me encontraría con un problema y este día fue el final. Todavía tengo que descubrir cómo instalar una biblioteca compartida para más de 50 aplicaciones cliente (usando Composer).
karvonen
7
Desearía que los desarrolladores de bibliotecas dejaran de usar composer. Es imposible en cualquier entorno de producción serio. Las personas que se esconden detrás de 'solo use composer' no tienen idea de lo que están haciendo en primer lugar.
IncredibleHat
108

Puede probar https://php-download.com/ que puede ayudarlo a descargar todas las dependencias la mayor parte del tiempo junto con la vendorcarpeta. Promete compositor no requerido. Lo intenté yo mismo. Busca y crea todas las carpetas necesarias y las comprime para su descarga. Funciona perfectamente !!

jahajee.com
fuente
4
¡Funciona perfectamente! Gracias !!
Yousphere
23
Esta debería ser la respuesta aceptada. Simplemente hace lo que hace el compositor y luego devuelve un zip
No tiene todas las bibliotecas de github. Cuando intento usar este, por ejemplo: github.com/mgp25/Instagram-API , dice que no puede encontrarlo.
Andi Hamolli
3
La respuesta anterior le dice muchos pasos a seguir mientras el sitio web lo simplifica a 1 paso descargable. No soy un programador profesionalmente pero PHP me permite hacer cosas locas con tanta facilidad que nunca he necesitado aprender SSH o compositor o paquete ... Estos están destinados a geeks y profesionales ... El sitio web eliminó esa limitación ... ... Creo que todos los que votaron a favor de mi respuesta encuentran que el sitio web lo hace mejor que el compositor ..... Si puedes hacer eso ... Ayudará a todos los programadores no geek
jahajee.com
4
@ ÁlvaroGonzález. Personalmente, no me importa si el compositor compila un proyecto en otra máquina. Simplemente no tengo privilegios de instalación en todas las máquinas en las que trabajo y, a veces, necesito obtener una biblioteca en una máquina con Windows sin ejecutar un archivo exe. Aprecio al compositor, no siempre puedo usarlo, lo cual fue frustrante sin este sitio para precompilarlo.
Altimus Prime
9

Estoy usando alojamiento compartido para un sitio web y no puedo ejecutar comandos allí. Además de ejecutar el compositor a través de la solicitud de script php que solicito a través del navegador, generalmente uso este flujo de trabajo:

  • Asegúrese de tener php instalado localmente.
  • Crear directorio en el escritorio.
  • descargue composer.phar de https://getcomposer.org/download/ (bajo el encabezado * Descarga manual ) y colóquelo en el directorio.
  • hacer un archivo composer.json pegar en él los siguientes contenidos

     {
         "require": {
             "coinbase/coinbase": "~2.0"
         }
     }
  • Vaya al directorio con el shell de su elección (bash, git-bash, cmd, windows bash)

  • tipo php composer.phar update captura de pantalla de la salida de bash
  • Sube el directorio de proveedores a tu servidor web a través de ftp o cualquier mecánico que uses.
  • incluya en su proyecto php donde carga sus bibliotecas (modifique la ruta donde cargó el directorio del proveedor para que incluya ese archivo de carga automática)

    require_once('vendor/autoload.php');

De esta manera, obtiene el beneficio de la administración de dependencias y no tiene que incluir manualmente todos los miles de millones de archivos y descargar todas las dependencias manualmente, y actualizarlas es tan fácil como escribir php composer.phar updatey luego reemplazar el directorio del proveedor en su servidor con el uno nuevo.

Tschallacka
fuente
4

Tuve que hacer esto para un servidor FTP al que no tenía acceso SSH. El sitio enumerado aquí funcionó, luego me di cuenta de que puede hacer una instalación del compositor en su propio servidor (usando la versión PHP de su objetivo), luego copiar todos los archivos.

Adam Thompson
fuente
1
Esa debería ser la respuesta. Funcionó perfectamente para mí,
Michael Walter
1
¿Puede explicar mejor su respuesta? Perdón por mi estupidez.
Andi Hamolli
1
@IchHabsDrauf Básicamente decidió usar el compositor (en esta parte, no es realmente la respuesta) y luego copiar los archivos al entorno de producción. Mi comentario a eso sería que tal vez también haya personas sin compositor en el entorno de desarrollo, por lo que esto no es realmente una respuesta.
Gall Annonim
3

Esta no es la solución definitiva, pero para mí fue de gran ayuda en la mayoría de los casos: https://github.com/Wilkins/composer-file-loader

Le permite cargar el archivo composer.json tal como lo haría el compositor. Esto le permite cargar el archivo composer.json sin composer (por lo que, teóricamente, PHP 5.2 es suficiente)

Sé que la pregunta es antigua, pero espero que ayude a alguien.

Helderk
fuente
1

Una solución alternativa que funcionó para mí (ya que php-download estaba inactivo) se puede hacer creando su propio pequeño descargador de compositor local.

  1. Descargue e instale XAMPP localmente: https://www.apachefriends.org/index.html
  2. Descargue e instale el compositor localmente: https://getcomposer.org/download/
  3. Abra commandprompt, navegue para decir c:\tempy simplemente escriba la dependencia del compositor, por ejemplo:composer require league/oauth2-client
  4. Copie los archivos de su c:\tempcarpeta a su servidor web usando un programa FTP
  5. Agregue esto a la parte superior de su php: require("vendor/autoload.php");
jsmars
fuente
¡Trabajado como un encanto! Gracias por esto :)
ajmeese7