Spack是一个软件包管理工具,类似于debain中的apt,pthon中的pip,node中的npm。与其他的包管理工具不一样的是,spack install时,所下载的时对应库的源代码,整个配置、编译、安装的过程时在本地完成的。和其他包管理器不同,spack 没有中心的 repository 服务器,这是因为每个具体软件的 url 都指向了对应软件的官网,因此 spack 本身并不需要维护一个服务器。
刚接触spack,虽然不是很熟悉,但是发现了spack有很多优点:1,spack可以在自己的目录下的opt文件夹安装很多工具,使用spack load
命令就可以自动设置$PATH
、LA_LIBRARY_PATH
等环境变量,极大简化操作;2,spack将package安装到本目录下的opt文件夹下面,避免使得/usr/local下面文件臃肿;3,可以通过spack clone
复制生成新的spack环境,可以在一台电脑上面管理多个安装环境;4,无需root权限就可以安装环境。
但是还有一些需要不太明白的地方:就是对于同一spack下,可以同事共存多个版本的package,那么在使用的过程中是怎么区分和使用的。
Spack下载安装
环境要求
Spack has the following minimum requirements, which must be installed before Spack is run:
- Python 2 (2.6 or 2.7) or 3 (3.5 – 3.9) to run Spack
- A C/C++ compiler for building
- The
make
executable for building - The
tar
,gzip
,unzip
,bzip2
,xz
and optionallyzstd
executables for extracting source code - The
patch
command to apply patches - The
git
andcurl
commands for fetching - If using the
gpg
subcommand,gnupg2
is required
安装
1 2 3 4 5 6 7 8 |
# pull spack代码 git clone https://github.com/spack/spack # 配置环境变量 export SPACK_ROOT=/path/to/spack export PATH=${SPACK_ROOT}/bin:${PATH} source ${SPACK_ROOT}/share/spack/setup-env.sh |
Spack常用命令
spack list
使用spack list
在终端中查看可以安装的软件。Spack package list列出所有可以安装的软件。
spack info
获取特定的软件包的详细信息。
spack install
普通安装
spack install
会首先安装相应的包对应的依赖。
例如,对于spack install mpileaks
,spack首先下载mpileaks
压缩包,然后解压并验证正确性,然后编译,最后安装到$SPACK_ROOT/opt
目录下:
1 2 3 4 5 6 7 8 9 10 |
$ spack install mpileaks ... dependency build output ... ==> Installing mpileaks-1.0-ph7pbnhl334wuhogmugriohcwempqry2 ==> No binary for mpileaks-1.0-ph7pbnhl334wuhogmugriohcwempqry2 found: installing from source ==> mpileaks: Executing phase: 'autoreconf' ==> mpileaks: Executing phase: 'configure' ==> mpileaks: Executing phase: 'build' ==> mpileaks: Executing phase: 'install' [+] ~/spack/opt/linux-rhel7-broadwell/gcc-8.1.0/mpileaks-1.0-ph7pbnhl334wuhogmugriohcwempqry2 |
最后一行[+]
表示该package已经安装。
加上debug选项可以输出更多信息,spack -d install mpileaks
可以输出更多安装信息。
安装特定版本
在软件包的package name后面添加@
,然后加上对应的版本信息。spack除了指定版本信息,还能指定安装过程中的编译时信息、编译选项、编译平台(交叉编译);此外,spack还可以配置package的依赖。
spack uninstall
--dependents
选项
当卸载一个package时,还有其他的package依赖这个package时,spack会拒绝卸载该package。
如果想卸载一个package以及每个依赖它的package时,使用--dependents
选项。
1 2 3 |
# 卸载mpich以及依赖mpich的package spack uninstall --dependents mpich |
终端会输出一系列依赖mpich的package,经确认后会删除。
--all
选项
当同一个package安装了多个版本,可以使用--all
选项全部删除,也可以使用@
指定特定的版本。
--force
选项
使用--force
选项可以强制删除对应的版本,但是这种方式可能破坏依赖,不建议该操作。
spack gc
在spack从源码编译和构建软件过程中,会临时安装有些工具来构建和测试安装的软件,spack提供垃圾回收(”garbage collector”)工具。使用spack gc
命令能够卸载不需要的packages。
spack find
spack find
命令能够输出已经安装的package,输出信息为package@version
,并根据结构和编译器分成不同的组。spack find
命令可以添加不同的参数来筛选输出。
例如,加入--paths
选项,spack find --paths
可以获取对应package安装的目录。
spack load / spack unload
spack将package安装在$SPACK_ROOT/opt
下的哈希长目录下,所以如果要使用这个package首先应该讲这些路径添加到环境变量中,spack load / spack unload
就是做这个工作的。
规格和依赖(Specs & dependencies)
对于spack install
和spack uninstall
命令,常常会在版本说明符@后面加上对应的版本选项。这些选项可以来指定从源码编译安装package过程的配置;出来指定package版本,还可以指定编译package的编译器、编译器版本、架构、编译选项以及相关依赖。
例如,一个完整的带参数选项的安装命令如下:
1 2 3 |
# 安装特定的package mpileaks spack install mpileaks @1.2:1.4 %gcc@4.7.5 +debug -qt target=x86_64 ^callpath @1.1 %gcc@4.7.2 |
分布说明上面的specs的含义:
@1.2:1.4
:安装mpieaks版本在1.2到1.4(包含1.4)之间
%[email protected]
:使用4.7.5版本的gcc来编译构建package mpileaks
debug
:开启debug选项
-qt
:关掉Qt支持选项
target=x86_64
:使用通用x86_64架构编译
^callpath @1.1
:将package mpileaks与版本1.1的callpath关联起来(依赖[email protected])
%[email protected]
:使用4.7.2版本安装gcc编译构建package callpath
上面mpileaks @1.2:1.4 %[email protected] +debug -qt target=x86_64 ^callpath @1.1 %[email protected]
称之为一个specs(规格?)。一般情况下,specs包括下面几个部分:
- package name(上面的
mpileaks
); @
版本指定符(上面的@1.2:1.4
);- %编译器指定符(可以不指定版本
%gcc
,也可以像上面指定编译器版本); +
、-
或~
可选项指定符(+debug
、-qt
或~qt
),指定布尔型的可选项;name=<value>
:可选项指定符,非布尔型可选项;name=<value>
:编译选项(compile flags)指定符。有效的编译选项(name的值)有:cflags
,cxxflags
,fflags
,cppflags
,ldflags
以及ldlibs
;target=<value> os=<value>
:架构和系统指定(例如,target=haswell os=CNL10
);^
:依赖specs(例如,^[email protected]
)。
package与依赖之间组成一个有向无环图,spack能够知道各个package之间的依赖关系,用户不用知道需要安装的package的完整的有向无环图依赖关系。如果使用^
在specs中指定一个需要安装的package并不依赖的包时,spack会报错。
References:
最新评论
感谢博主,让我PyTorch入了门!
博主你好,今晚我们下馆子不?
博主,你的博客用的哪家的服务器。
您好,请问您对QNN-MO-PYNQ这个项目有研究吗?想请问如何去训练自己的数据集从而实现新的目标检测呢?
where is the source code ? bomb1 188 2 8 0 0 hello world 0 0 0 0 0 0 1 1 9?5
在安装qemu的过程中,一定在make install 前加入 sudo赋予权限。
所以作者你是训练的tiny-yolov3还是yolov3...
很有用