如何在没有Composer的情况下安装Composer PHP软件包?


97

我正在尝试安装Coinbase PHP API,但它需要Composer:

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

我正在寻找一种通用的PHP解决方案(也许是一个函数),使我无需使用Composer即可直接将composer软件包安装到服务器上。

我认为Composer的开发人员相信他们正在帮助人们,但是实际上有成千上万的初学者开发人员因“ Composer障碍”而无法学习网络开发。

如果有一个灵活的解决方案或某种方法可以在不使用Composer的情况下进行安装,那真的有帮助吗?我怎样才能做到这一点?

请不要以讽刺的评论回应。有些人不想使用Composer,而且我不明白为什么要为了进行Web开发而将我们放到特定的第三方软件中。


6
所有使用composer的软件包仍然仅仅是充满PHP文件的目录。您可以以与作曲家存在之前完全相同的方式安装它们:将它们复制到某个位置和include文件。
deceze

2
基于Composer的安装意味着运行单个命令,该命令几乎总是显示在软件包主页中。我知道有一些手动安装的用例,但永远不会是更简单的方法。
阿尔瓦罗·冈萨雷斯

19
@ÁlvaroGonzález我完全同意您的意见。请参阅:okmaya.com/2016/03/13/package-managers-hate-npm-composer。我并不是说软件包管理器对某些人和项目不是很好,只是他们通常比简单地在项目中放置一个文件夹并引用它需要更多的工作和精力。
dallin

3
@dallin尽管有标题,但该文章主要是关于现代过度设计的框架和工具链(本身就是一个问题)。如果您要安装一个碰巧具有30个依赖关系的库,则转而使用30个手动安装来转储Composer会让您感到更男性化或其他任何东西,但是我不会这么称呼它,对于初学者来说,这要少得多。
阿尔瓦罗·冈萨雷斯

9
@ÁlvaroGonzález老实说,我不必安装具有30个依赖项的库(听起来设计得不好)。我敢肯定,没有包管理器将是一场噩梦。我的经验与那篇文章相似。我通常会尝试安装具有一两个依赖关系的程序,最终不得不花时间在甚至开始编码之前,用软件包管理器对问题进行故障排除。错误消息太频繁了,而且令人难以置信的模糊和深奥。这可能会更好地说明我的感受:imgur.com/r/webdev/bO7oTf6。我在PM方面的经历很相似。
dallin

Answers:


38

composer.json文件列出了依赖性。在您的示例中:

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

然后,您必须在packagist站点中找到相应的软件包。对每个依赖项重复相同的过程:在其相应composer.json文件中查找其他依赖项,然后再次搜索。

当您最终获得了所需软件包的完整列表时,只需一个接一个地安装它们。在大多数情况下,只需将文件拖放到项目目录中的某个位置即可。但是,您还必须确保PHP可以找到所需的类。由于您没有使用Composer的自动加载器,因此需要将它们添加到自己的自定义自动加载器中。您可以从各个composer.json文件中找出信息,例如:

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

如果您不使用类自动加载器,则需要找出各个require_once语句。您可能需要大量的试验和错误,因为大多数图书馆作者都不愿意对此进行记录。

另外,以防万一对此感到困惑:

  • Composer具有Windows的正式GUI安装程序,以及适用于所有平台的复制和粘贴命令行安装过程。
  • Composer可以在本地运行,其输出仅在其他位置上传。您无需在共享托管中使用SSH。
  • 可以从软件包网站复制和粘贴安装库所需的命令-即使软件包维护者不在乎对其进行文档记录,packagist.org也会默认生成它。

Composer并不完美,也不适合所有用例,但是,在安装依赖它的库时,毫无疑问,它是最佳选择,而且相当不错。


我检查了我的其他答案。它们主要分为两类:

  1. 安装库并编写一个自定义下载脚本
  2. 对Composer使用基于Web的在线界面

除非我有任何遗漏,否则他们都不会解决OP提出的投诉:

  • 学习曲线
  • 使用第三方软件
  • 可以在服务器上直接开发的可能性(我认为是使用SSH)
  • 潜在的深层依赖树

23
如果这不能说服所有人都使用作曲家,那么什么也不会……
deceze

3
首先,当前版本的composer需要proc_open(),该函数并非在所有地方都可用。还有其他问题。虽然我同意作曲家有其长处,但我一直都知道我有一天会遇到问题,而今天就是这样。我还没有弄清楚如何为50多个客户端应用程序安装共享库(使用Composer)。
karvonen

7
我希望图书馆开发人员停止使用作曲家。在任何严重的生产环境中都无法进行。躲在“只用作曲家”后面的人一开始不知道自己在做什么。
IncredibleHat

108

您可以尝试https://php-download.com/,它可以帮助您大部分时间下载所有依赖项以及vendor文件夹。它保证不需要作曲家。我自己试过了。它查找并创建所有必需的文件夹,并将其压缩以供下载。完美的作品!


4
工作完美!谢谢 !!
Yousphere

23
这应该是公认的答案。它只是执行作曲家的工作,然后返回一个zip

它没有来自github的所有库。例如,当我尝试使用此代码时:github.com/mgp25/Instagram-API,它说找不到它。
安迪·哈莫利

3
当网站将其简化为1个可下载的步骤时,以上答案说明了许多步骤。我不是专业程序员,但是PHP允许我轻松地执行疯狂的事情,以至于我不需要学习SSH或作曲家或程序包....这些是针对极客和专业人士的。 ...我相信所有支持我的回答的人都会发现该网站比作曲家更好.....如果您能做到....它将帮助所有非怪胎程序员
jahajee.com

4
@ÁlvaroGonzález。我个人不关心作曲家是否在其他机器上编译项目。我只是在所有使用的计算机上没有安装特权,有时我需要在Windows计算机上获取一个库而不运行exe文件。我很欣赏作曲家,我只是不能总是使用它,没有这个网站为我进行预编译就令人沮丧。
Altimus Prime '18 -4-12

9

我正在使用网站的共享托管,无法在该网站上执行命令。除了我通过浏览器请求的通过php脚本请求运行作曲家之外,我通常还会使用以下工作流程:

  • 确保您在本地安装了php。
  • 在桌面上创建目录。
  • https://getcomposer.org/download/(在标题* Manual Download之下)下载composer.phar 并将其放置在目录中。
  • 使文件composer.json粘贴以下内容

     {
         "require": {
             "coinbase/coinbase": "~2.0"
         }
     }
    
  • 使用您选择的外壳浏览目录(bash,git-bash,cmd,Windows bash)

  • 类型 php composer.phar update bash输出的屏幕截图
  • 通过ftp或您使用的任何机制将供应商目录上传到您的Web服务器。
  • 包括在您的php项目中,您可以在其中加载库(修改您上传供应商目录的路径,这样它将包含该自动加载文件)

    require_once('vendor/autoload.php');

这样,您就可以受益于依赖关系管理,而不必手动包含所有大量的文件并手动下载所有依赖关系,更新它们就像键入内容php composer.phar update然后将服务器上的供应商目录替换为新的一个。


4

我必须对没有SSH访问权限的FTP服务器执行此操作。这里列出的站点正常工作,然后我意识到您可以只在自己的服务器上安装作曲家(使用目标的PHP版本),然后复制所有文件。


1
那应该是答案。为我完美地工作,
Michael Walter

1
您能更好地解释您的答案吗?对不起,我很愚蠢。
安迪·哈莫利

1
@IchHabsDrauf基本上,他提到要使用作曲家(在此部分,它实际上并不是真正的助手),然后将文件复制到生产环境中。我对此的评论是,也许有些人在开发环境方面也没有作曲家,因此这并不是真正的烦恼。
Gall Annonim

3

这不是最终的解决方案,但对我而言,对于大多数情况而言,这是一个很大的帮助:https : //github.com/Wilkins/composer-file-loader

允许您像composer一样加载composer.json文件。这允许您在不使用composer的情况下加载composer.json文件(因此从理论上讲,PHP 5.2就足够了)

我知道这个问题很老,但我希望它能对某人有所帮助。


1

可以通过制作自己的小型本地作曲家下载器来完成对我有用的替代解决方案(因为php-download被关闭)。

  1. 在本地下载并安装XAMPP:https//www.apachefriends.org/index.html
  2. 在本地下载并安装Composer:https//getcomposer.org/download/
  3. 打开命令提示符,导航并说出c:\temp并简单地输入撰写者的依存关系,例如:composer require league/oauth2-client
  4. c:\temp使用FTP程序将文件从文件夹复制到Web主机
  5. 将其添加到您的php的顶部: require("vendor/autoload.php");

像魅力一样工作!谢谢:)
ajmeese7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.