在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.json
和 composer.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.json 和 composer.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.0 | 1.0, 1.2.3, 1.9.9 |
^1.1.0 | >= 1.1.0 < 2.0 | 1.1.0, 1.5.6, 1.9.9 |
~1.0 | >= 1.0 < 2.0.0 | 1.0, 1.4.1, 1.9.9 |
~1.0.0 | >= 1.0.0 < 1.1 | 1.0.0, 1.0.4, 1.0.9 |
1.2.1 | 1.2.1 | 1.2.1 |
1.* | >= 1.0 < 2.0 | 1.0.0, 1.4.5, 1.9.9 |
1.2.* | >= 1.2 < 1.3 | 1.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.json
和 composer.lock
文件,以便其他人可以安装这些更新版本。
结论
Composer 是每个 PHP 开发人员都应该在其工具箱中拥有的强大工具。在本教程中,你安装了 Composer 并在一个简单的项目中使用了它。你现在知道如何安装和更新依赖项。
除了提供一种简单可靠的管理项目依赖关系的方式之外,它还为社区创建的 PHP 包的共享和发现建立了一个新的事实标准。
相关文章:
在Ubuntu 18.04上安装和使用Composer的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…...

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

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

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署
目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸…...

Synchronized升级到重量级锁会发生什么?
我们从网上看到很多,升级到重量锁的时候不会降级,再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库: <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...
【Webpack】HMR 热更新
HMR全称Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用。 不使用热更新,我们在应用运行过程中修改了某个模块,通过自动刷新会导致整个…...

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

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

pytest常用命令行参数解析
简介:pytest作为一个成熟的测试框架,它提供了许多命令行参数来控制测试的运行方式,以配合适用于不同的测试场景。例如 -x 可以用于希望出现错误就停止,以便定位和分析问题。–rerunsnum适用于希望进行失败重跑等个性化测试策略。 …...
pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本
一、背景 通过pgsql的dump命令可以快速的做数据库表结构、表数据的备份,随着业务不断的增加单库单实例已经不能满足业务需要。技术人员是比较懒惰的,每次敲相同命令或是无脑的复制黏贴操作感觉都是对精神的一种摧残,解决摧残的方法就是把命令…...

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算
这里介绍一个小TIPS,很久没有这么有成就感了。我以前在学3D数学的时候,书上就有一句话,说你把矢量这些东西用久了,就应该形成一种“直觉”,仿佛这些东西就是你的左右手一样。而这次,我居然真的用“直觉”来…...

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

【Vue3】工程创建及目录说明
【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…...
算法学习2——排序算法(2)
上一篇介绍了几种常见且使用较多的排序算法,本章主要是一个进阶内容,介绍三个较为复杂的算法。 计数排序 (Counting Sort) 计数排序是一种适用于范围较小的整数序列的排序算法。它通过统计每个元素的出现次数,然后依次输出元素,…...

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)
1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制…...

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

iOS 开发包管理之CocoaPods
CocoaPods(Objective-C 时期,支持Objective-C和swift),CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式,并将它们添加到项目中,建立依赖关系,这种…...

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

VS2019安装MFC组件
VS2019支持的MFC版本是mfc140 ~ mfc142版本,它兼容VS2015、VS2017之前的老版本程序。 一、MFC的历史版本 MFC的历史版本如下: 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中,open() 函数…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...