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

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

问题描述:

I found there are two options to install PHP package globally in Linux (Ubuntu 16.04):

  1. Using composer:

    composer global require symfony/finder
    

    The package will be located at ~/.config/composer/vendor/

    enter image description here

  2. Using apt-get:

    apt-get install php-symfony-finder
    

    The package will be located at /usr/share/php/

    enter image description here

    This directory /usr/share/php/ is also in default PHPs include_path (I have PHP 7.2)

    enter image description here


There are several questions I have:

Why would I want to install package globally ?

I know it's useful to install php tools globally, like phpunit - It has binary file and it allows you to run tests everywhere, so you don't have to install it in every project. But what about symfony/finder for example ? What is particular use of this package installed globally ?

What is the difference between 1 and 2 option ?

Does it have any different use cases or different effects ?

我发现有两种方法可以在Linux(Ubuntu 16.04)中全局安装PHP包: p>

  1. 使用 composer code>: p>

      composer global require symfony / finder 
      code>  
     
     

    包将位于〜/ .config / composer / vendor / code> p>

    p> li>

  2. 使用 apt-get code>: p>

      apt-get 安装php-symfony-finder 
      code>  pre> 
     
     

    该软件包将位于 / usr / share / php / code> p> \ n

    p>

    此目录 / usr / share / php / code>也是默认的PHP include_path code>(我有PHP 7.2) p>

    p> li> ol>


    我有几个问题: p>

    为什么我要全局安装包? strong> p>

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

    1和2选项有什么区别? strong> p>

    它有不同的用例或不同的效果吗? p> div>

Why would I want to install package globally ?

Normally, these are dependencies you want to use in almost every project, because they are available at a system level you can use them without duplicating their dependencies in every application you create.

For example, in my case I have php_md, php_cs for code formatting, phpunit for testing.

What is the difference between 1 and 2 option ?

Both are package managers, they make sure every package installed has the correct dependencies, so their core functionality is similar.

Now, they have several differences:

  • Their focus in the packages they manage, composer is specific for php based packages but apt-get is for Linux and more system level oriented.
  • Their package database, composer uses packagist and apt-get uses a selection of repositories and ppas (you can find them in /var/lib/apt/lists/).
  • The package selection, since composer is specialized in php you can expect a wider variety in anything php related.

In conclusion, you can clearly make it work with both, but I would recommend you to keep everything php related on composer, unifying them under the same manager.

Any other difference or correction I've overlooked is welcome.