PHP 全局安装包:apt-get vs composer

Posted

技术标签:

【中文标题】PHP 全局安装包:apt-get vs composer【英文标题】:PHP install package globally: apt-get vs composer 【发布时间】:2018-09-07 05:25:06 【问题描述】:

我发现在 Linux (Ubuntu 16.04) 中全局安装 php 包有两种选择:

    使用composer

    composer global require symfony/finder
    

    包裹将位于~/.config/composer/vendor/

    使用apt-get

    apt-get install php-symfony-finder
    

    包裹将位于/usr/share/php/

    这个目录 /usr/share/php/ 也在默认的 PHP 中 include_path(我有 PHP 7.2)


我有几个问题:

为什么要全局安装包?

我知道全局安装 php 工具很有用,例如 phpunit - 它有二进制文件,它允许您在任何地方运行测试,因此您不必在每个项目中都安装它。 但是例如symfony/finder 呢?全局安装的这个包有什么特别的用途?

1 和 2 选项有什么区别?

它有什么不同的用例或不同的效果吗?

【问题讨论】:

一口气问了太多问题。但是关于 apt-get 的一件事是您必须采用包中定义的版本。通常它们会落后于最新版本 - 有时会落后很多。 我想有些东西不仅是php使用的。在这种情况下,你会做 apt-get。 (也许我会说些蠢话,但我在考虑 wkhtmltopdf) apt-get安装的版本是全局的;它可以被系统的其他用户使用。使用composer 安装的那个位于您的主目录中;只有你可以使用它。如果您是计算机的唯一用户,那么这没有任何区别。但是,composer 安装的版本始终是最新版本,而apt-get 安装的版本更新频率较低,有时可能会被冻结,不再更新。 如您所说,Phpunit 是一个工具。 symfony/finder 是项目的项目/依赖项的一部分,因此您必须在每个项目中保留它。想象一下开发一个 symfony4 项目并维护一个在 symfony 2.7 上运行的项目。 finder 的版本不同,因此您必须保留全局安装的 finder 的 2 个版本。或者您必须为 dev 分支和 master 分支保留不同的版本。矫枉过正 全局安装 phpunit 是个坏主意,因为它是一个非常活跃的项目,需要经常更改以支持最新版本的 php。当一个应用程序需要一个版本的 phpunit 而另一个应用程序需要一个不同的版本时,您很快就会遇到这种情况。我认为全球安装能力只是早期时代的遗留物。 【参考方案1】:

为什么要全局安装包?

通常,这些是您希望在几乎每个项目中使用的依赖项,因为它们在系统级别可用,您可以使用它们而无需在您创建的每个应用程序中复制它们的依赖项。

例如,在我的例子中,php_mdphp_cs 用于代码格式化,phpunit 用于测试。

1 和 2 选项有什么区别?

两者都是包管理器,它们确保安装的每个包都具有正确的依赖关系,因此它们的核心功能相似。

现在,它们有几个不同之处:

他们专注于他们管理的软件包,composer 专门针对基于 php 的软件包,但 apt-get 是针对 Linux 和更多面向系统级别的。 他们的包数据库composer 使用packagist 和apt-get 使用一系列存储库和ppas(您可以在/var/lib/apt/lists/ 中找到它们)。 包选择,因为composer 专门用于php,您可以期待与php 相关的任何东西的更多种类。

总之,您可以清楚地使其与两者一起使用,但我建议您将所有与作曲家相关的php 保留,将它们统一在同一个经理之下。

欢迎任何其他我忽略的差异或更正。

【讨论】:

以上是关于PHP 全局安装包:apt-get vs composer的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 安装php 扩展和查看扩展包

如何安装apt-get

如何使用 apt-get 安装旧版本的 php?

yum 和 apt-get

sudo apt-get install 安装包失败

sudo apt-get install 安装包失败