当前位置: 首页 > news >正文

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包,并根据项目要求安装适当的版本。

在本教程中,您将在 Ubuntu 18.04 系统上安装并开始使用 Composer。

先决条件

要完成本教程,您需要:

  • 一个按照 Ubuntu 18.04 初始服务器设置指南设置的 Ubuntu 18.04 服务器,包括一个 sudo 非 root 用户和一个防火墙。

步骤 1 — 安装依赖项

在下载和安装 Composer 之前,您需要确保服务器已安装所有依赖项。

首先,通过运行以下命令更新软件包管理器缓存:

sudo apt update

现在,让我们安装依赖项。我们需要使用 curl 下载 Composer,使用 php-cli 安装和运行它。php-mbstring 包是必需的,以提供我们将使用的库的函数。git 用于下载项目依赖项,unzip 用于解压缩压缩包。您可以使用以下命令安装所有内容:

sudo apt install curl php-cli php-mbstring php-curl git unzip

安装完先决条件后,我们可以安装 Composer 本身。

步骤 2 — 下载并安装 Composer

Composer 提供了一个用 PHP 编写的安装程序。我们将下载它,验证它是否损坏,然后使用它来安装 Composer。

确保您位于主目录中,然后使用 curl 检索安装程序:

cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php

接下来,验证安装程序是否与 Composer Public Keys / Signatures 页面上找到的最新安装程序的 SHA-384 哈希匹配。从该页面复制哈希并将其存储为 shell 变量:

HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

确保您用最新的哈希替换高亮值。

现在执行以下 PHP 脚本以验证安装脚本是否安全运行:

php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

您将看到以下输出。


Installer verified

如果您看到 Installer corrupt,那么您需要重新下载安装脚本,并再次检查您是否使用了正确的哈希。然后再次运行命令验证安装程序。一旦您有了经过验证的安装程序,就可以继续。

要全局安装 composer,请使用以下命令,它将下载并安装 Composer 作为名为 composer 的系统命令,放在 /usr/local/bin 下:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

您将看到以下输出:


All settings correct for using Composer
Downloading...Composer (version 2.1.9) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

要测试您的安装,请运行:

composer

您将看到以下输出,显示 Composer 的版本和参数。

______/ ____/___  ____ ___  ____  ____  ________  _____/ /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_//_/
Composer version 2.1.9 2021-10-05 09:47:38Usage:command [options] [arguments]Options:-h, --help                     Display this help message-q, --quiet                    Do not output any message-V, --version                  Display this application version--ansi                     Force ANSI output--no-ansi                  Disable ANSI output-n, --no-interaction           Do not ask any interactive question--profile                  Display timing and memory usage information--no-plugins               Whether to disable plugins.-d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.--no-cache                 Prevent use of the cache-v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

这验证了 Composer 在您的系统上成功安装,并且可以在系统范围内使用。

现在让我们看看如何使用 Composer 来管理依赖项。

步骤 3 —— 在 PHP 项目中使用 Composer

PHP 项目通常依赖于外部库,管理这些依赖及其版本可能会很棘手。Composer 通过跟踪您的依赖关系并使其他人能够轻松安装它们来解决这个问题。

为了在项目中使用 Composer,您需要一个 composer.json 文件。composer.json 文件告诉 Composer 它需要为您的项目下载哪些依赖项,以及允许安装每个软件包的哪些版本。这对于保持项目一致性并避免安装可能导致向后兼容性问题的不稳定版本非常重要。

您不需要手动创建此文件 —— 这样做很容易遇到语法错误。当您使用 require 命令向项目添加依赖项时,Composer 会自动生成 composer.json 文件。您可以以相同的方式添加其他依赖项,而无需手动编辑此文件。

使用 Composer 在项目中安装包作为依赖项的过程包括以下步骤:

  • 确定应用程序需要哪种类型的库。
  • 在 Packagist.org 上研究合适的开源库,这是 Composer 的官方包存储库。
  • 选择您想要依赖的软件包。
  • 运行 composer require 将依赖项包含在 composer.json 文件中并安装该软件包。

让我们通过一个演示应用程序来尝试一下。

该应用程序的目标是将给定的句子转换为 URL 友好的字符串 —— 一个 slug。这通常用于将页面标题转换为 URL 路径(例如本教程的 URL 最后一部分)。

让我们从为我们的项目创建一个目录开始。我们将其命名为 slugify

cd ~
mkdir slugify
cd slugify

现在是时候在 Packagist.org 上搜索一个可以帮助我们生成 slugs 的软件包了。如果您在 Packagist 上搜索术语 “slug”,您将会得到类似于以下结果:

!Packagist Search: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

您将在列表中的每个软件包右侧看到两个数字。顶部的数字表示软件包被安装的次数,底部的数字显示软件包在 GitHub 上被标记为喜欢的次数。您可以根据这些数字重新排列搜索结果(查找搜索栏右侧的两个图标)。一般来说,安装次数和星星数更多的软件包往往更稳定,因为有很多人在使用它们。还要检查软件包描述的相关性,以确保它是您需要的。

我们需要一个简单的字符串转换为 slug 的转换器。从搜索结果中,软件包 cocur/slugify 似乎是一个很好的选择,安装次数和星星数都还可以接受。 (软件包在截图显示的页面下方一点点。)

Packagist 上的软件包有一个 vendor 名称和一个 package 名称。每个软件包都有一个唯一的标识符(命名空间),格式与 GitHub 用于其存储库的格式相同,即 vendor/package。我们要安装的库使用的命名空间是 cocur/slugif。您需要这个命名空间才能在项目中要求该软件包。

现在您知道要安装的确切软件包是哪个了,运行 composer require 将其包含为依赖项,并为项目生成 composer.json 文件:

composer require cocur/slugify

当 Composer 下载依赖项时,您将看到以下输出:


Using version ^4.0 for cocur/slugify
./composer.json has been created
Running composer update cocur/slugify
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals- Locking cocur/slugify (v4.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals- Downloading cocur/slugify (v4.0.0)- Installing cocur/slugify (v4.0.0): Extracting archive
Generating autoload files

从输出中可以看出,Composer 自动决定了要使用的软件包的版本。如果现在检查您的项目目录,它将包含两个新文件:composer.jsoncomposer.lock,以及一个 vendor 目录:

ls -l

total 12
-rw-rw-r-- 1 sammy sammy   59 Oct 26 19:04 composer.json
-rw-rw-r-- 1 sammy sammy 3411 Oct 26 19:04 composer.lock
drwxrwxr-x 4 sammy sammy 4096 Oct 26 19:04 vendor

composer.lock 文件用于存储有关安装了哪些软件包的版本信息,并确保如果其他人克隆您的项目并安装其依赖项时使用相同的版本。vendor 目录是项目依赖项的所在地。vendor 文件夹不需要提交到版本控制 —— 您只需要包含 composer.jsoncomposer.lock 文件。

让我们快速看一下版本约束。如果检查您的 composer.json 文件的内容,您将看到类似于以下内容:

cat composer.json

{"require": {"cocur/slugify": "^4.0"}
}

您可能会注意到 composer.json 中版本号前面的特殊字符 ^。Composer 支持几种不同的约束和格式来定义所需的软件包版本,以提供灵活性同时保持项目的稳定性。由自动生成的 composer.json 文件使用的插入符(^)运算符是最大互操作性的推荐运算符,遵循语义化版本。在这种情况下,它将 4.0 定义为最低兼容版本,并允许更新到 5.0 以下的任何未来版本。

一般来说,您不需要在 composer.json 文件中修改版本约束。但是,某些情况可能需要您手动编辑约束 —— 例如,当您需要升级所需库的一个主要新版本时,或者您想要使用的库不遵循语义化版本时。

以下是一些示例,以便更好地理解 Composer 版本约束的工作原理:

约束含义允许的示例版本
^1.0>= 1.0 < 2.01.0, 1.2.3, 1.9.9
^1.1.0>= 1.1.0 < 2.01.1.0, 1.5.6, 1.9.9
~1.0>= 1.0 < 2.0.01.0, 1.4.1, 1.9.9
~1.0.0>= 1.0.0 < 1.11.0.0, 1.0.4, 1.0.9
1.2.11.2.11.2.1
1.*>= 1.0 < 2.01.0.0, 1.4.5, 1.9.9
1.2.*>= 1.2 < 1.31.2.0, 1.2.3, 1.2.9

有关 Composer 版本约束的更深入视图,请参阅官方文档。

接下来,让我们看一下如何使用 Composer 自动加载依赖项。

步骤 4 — 包含自动加载脚本

由于 PHP 本身不会自动加载类,Composer 提供了一个自动加载脚本,你可以在项目中包含它,从而免费获得自动加载功能。这样可以更轻松地处理项目的依赖关系。

你需要做的唯一一件事就是在 PHP 脚本中在任何类实例化之前包含 vendor/autoload.php 文件。当你添加第一个依赖项时,Composer 会自动生成这个文件。

让我们在我们的应用程序中尝试一下。创建文件 test.php 并在文本编辑器中打开它:

nano test.php

添加以下代码,引入 vendor/autoload.php 文件,加载 cocur/slugify 依赖项,并使用它创建一个 slug:

<?php
require __DIR__ . '/vendor/autoload.php';use Cocur\Slugify\Slugify;$slugify = new Slugify();echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');

保存文件并退出编辑器。

现在运行脚本:

php test.php

这将产生输出 hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it

当新版本发布时,依赖项需要更新,让我们看看如何处理这个问题。

步骤 5 — 更新项目依赖项

每当你想要将项目依赖项更新到更新版本时,运行 update 命令:

composer update

这将检查你项目中所需的库的更新版本。如果找到更新版本并且它与 composer.json 文件中定义的版本约束兼容,Composer 将替换先前安装的版本。composer.lock 文件将被更新以反映这些更改。

你也可以通过像这样指定它们来更新一个或多个特定的库:

composer update vendor/package vendor2/package2

确保在更新依赖项后检查你的 composer.jsoncomposer.lock 文件,以便其他人可以安装这些更新版本。

结论

Composer 是每个 PHP 开发人员都应该在其工具箱中拥有的强大工具。在本教程中,你安装了 Composer 并在一个简单的项目中使用了它。你现在知道如何安装和更新依赖项。

除了提供一种简单可靠的管理项目依赖关系的方式之外,它还为社区创建的 PHP 包的共享和发现建立了一个新的事实标准。

相关文章:

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具&#xff0c;主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…...

ssm 学习 ---(spring)

一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单&#xff1a;xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件&#xff0c;将UserService信息配置到该xml文件中; (4)编写测试代码&#xff0c;创…...

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…...

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…...

Synchronized升级到重量级锁会发生什么?

我们从网上看到很多&#xff0c;升级到重量锁的时候不会降级&#xff0c;再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库&#xff1a; <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...

【Webpack】HMR 热更新

HMR全称Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用。 不使用热更新&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致整个…...

【计算机视觉】siamfc论文复现

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…...

PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化

一、简介 经过广大网友的反馈和建议&#xff0c;我们对V1.1版本中存在的问题进行了优化。其中&#xff0c;我们针对MD5库进行了本地化处理&#xff0c;以提高查询效率。然而&#xff0c;这也导致了软件体积的飙升。二、优化概述 1、兼容性 兼容arm架构系统 2、UI 2.1 界面…...

pytest常用命令行参数解析

简介&#xff1a;pytest作为一个成熟的测试框架&#xff0c;它提供了许多命令行参数来控制测试的运行方式&#xff0c;以配合适用于不同的测试场景。例如 -x 可以用于希望出现错误就停止&#xff0c;以便定位和分析问题。–rerunsnum适用于希望进行失败重跑等个性化测试策略。 …...

pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本

一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份&#xff0c;随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的&#xff0c;每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残&#xff0c;解决摧残的方法就是把命令…...

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…...

ICMP 和 IGMP 的区别

ICMP 和 IGMP 协议 IP 层分支图 ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制信息协议&#xff09; 用于补充 IP 传输数据报的过程中&#xff0c;发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…...

【Vue3】工程创建及目录说明

【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…...

算法学习2——排序算法(2)

上一篇介绍了几种常见且使用较多的排序算法&#xff0c;本章主要是一个进阶内容&#xff0c;介绍三个较为复杂的算法。 计数排序 (Counting Sort) 计数排序是一种适用于范围较小的整数序列的排序算法。它通过统计每个元素的出现次数&#xff0c;然后依次输出元素&#xff0c;…...

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)

1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制…...

python-NLP:1中文分词

文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法&#xff0c;主要是通过维护词典&#xff0c;在切分语句时&#xff0c;将语句的每个字符串与词表中的词进行…...

iOS 开发包管理之CocoaPods

CocoaPods&#xff08;Objective-C 时期&#xff0c;支持Objective-C和swift&#xff09;&#xff0c;CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式&#xff0c;并将它们添加到项目中&#xff0c;建立依赖关系&#xff0c;这种…...

Windows搭建RTMP视频流服务器

参考了一篇文章&#xff0c;见文末。 博客中nginx下载地址失效&#xff0c;附上一个有效的地址&#xff1a; Index of /download/ 另外&#xff0c;在搭建过程中&#xff0c;遇到的问题总结如下&#xff1a; 1 两个压缩包下载解压并重命名后&#xff0c;需要 将nginx-rtmp…...

VS2019安装MFC组件

VS2019支持的MFC版本是mfc140 ~ mfc142版本&#xff0c;它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下&#xff1a; IDE发布时间工具集版本MSC_VERMSVCMFC版本dllVisual C6.01998V601200MSVC6.06.0mfc42.dll、mfcce400.dllVisual Studio 2002…...

Python学习—open函数,json与pickle知识点,Os模块详解

目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中&#xff0c;open() 函数…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...