百度AnyQ之一——基于docker进行安装

https://github.com/baidu/AnyQ

1. 风险警告

写在前面——前置风险

  • 这个库并不像PaddleOCR那个库那么流行,维护更新那么及时。这个库——github-AnyQ,最近一次更新时间是2020.11.28。(这个库第一次提交是2018年7月2号,也有可能是因为经过两年的完善,没有更多人试出更多错误。。。)
  • 另外根据网上很多安装教程,最好使用docker安装,而且可能会由于gcc等的版本问题,安装失败,还可能会由于网络原因失败。
  • 另外,AnyQ这个库的迭代更新并不与PaddlePaddle一致,所以下载安装包的时候最好按照官方推荐来进行。
  • 网上没有特别多的资料,大部分只介绍了安装,也没有使用体验之类的,问问题的倒是有,但是解答问题的没几个,github的issue回复也没有paddleocr那么及时,虽然也有2.3k个star。
  • 同时查看了一下issue中一些内容,

2 直接linux安装

参考:
Linux系统上 编译安装百度开源AnyQ(非docker环境)

先确定一些基础组件的版本,官方文档推荐的是:

  • cmake 3.0以上(推荐3.2.2版本),
  • g++ >=4.8.2,
  • bison >=3.0

1. 查看gcc版本

gcc --version
> gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

2. 查看glibc库版本(其实这步可以不做。)

# 使用的命令类似以下
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

如果报错strings: '/lib64/libc.so.6': No such file,那么需要注意:

  • 当前的目录,这个lib64可能会在根目录或者是当前用户目录下,自己切过去,查看一下,
  • 另外这个文件的名称可能也随着系统版本不一样而不同,自己ls看一下这个lib64目录下的以.so结尾的文件。
  • 如下所示
# 切换到根目录
cd /
# 切换到当前用户的home目录下
cd ~	

在这里插入图片描述
整体如下:

(base) / > cd lib64 
(base) /lib64 > ls
ld-linux-x86-64.so.2
(base) /lib64 > strings ld-linux-x86-64.so.2|grep GLIBC_
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_PRIVATE
GLIBC_TUNABLES

# 另外,还可以直接以下面的代码查看版本
ldd --version 
>ldd (Ubuntu GLIBC 2.27-3ubuntu1.4) 2.27
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

# 另外,捎带检测一下CXXABI版本
strings /lib64/ld-linux-x86-64.so.2| grep 'CXXABI'
# 什么都没有返回 没有这个库。。

可以看到,本机glibc的版本还挺高的,有三个版本,2.2.5,2.3以及2.4

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
所以新版本,旧版本都有。

3. 查看cmake及make版本

# linux编译使用的语句中用到了cmake和make
mkdir build && cd build && cmake .. && make

cmake --version
# 上一句很可能报错 zsh: command not found: cmake

make -v # make这个命令默认倒是有的

# 如果没有cmake,则需要进行安装,默认好像是没有的,只有make 可以查看3.1.1 安装cmake部分
cmake --version     
> cmake version 3.20.6
CMake suite maintained and supported by Kitware (kitware.com/cmake).

4. bison安装和版本查看

GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR(1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR(1) 或规范 LR(1) 解析表。一旦您熟练使用 Bison,您可以使用它开发广泛的语言解析器,从简单的桌面计算器中使用的解析器到复杂的编程语言。
Bison与Yacc向上兼容:所有正确编写的Yacc语法都可以在Bison上正常使用。熟悉Yacc的任何人都应该可以轻松使用Bison。您需要精通C,C ++或Java编程才能使用Bison。
Bison及其生成的解析器是可移植的,它们不需要任何特定的编译器。

直接进行安装,如果报错,参考 3.1.2 bison安装报错 解决

sudo apt-get install bison

反正安装完就会显示类似下面的信息
在这里插入图片描述
这里的版本是3.0.2,应该这个库不会频繁更新,AnyQ的要求是:bison >=3.0,符合要求。

5. 其他依赖的安装和版本查看(python、java)

python --version 
> Python 3.8.5

java -version
# 没有返回信息,说明ubuntu默认不带java,需要自己安装

要求中,jdk>=1.8,所以需要安装一下java/jdk。

截止到这里因某种不可抗力失败了。

3. docker安装

3.1 基本安装

参考:

3.1.1 基本安装

按照建议,去用centos的镜像搞,

(base) /ws/paddle21 > docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
(base) /ws/paddle21 > docker images |grep centos
centos centos7     eeb6ee3f44bd   4 weeks ago     204MB 
# 镜像好小,只有204MB,不容易

docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7  
# 这句话其实有问题,把容器放到后台执行了
docker exec -it centos-anyq /bin/bash
# 把容器放回到前台

cd home/ # 切入home目录

# 如果提示没有wget,就安装一下
yum -y install wget

# 安装jdk
wget http://anyq.bj.bcebos.com/jdk-8u171-linux-x64.tar.gz
#解压
tar xzvf jdk-8u171-linux-x64.tar.gz
#添加路径
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH

##安装gcc
 yum install -y gcc gcc-c++ make automake

##安装cmake v3.3.2
wget https://cmake.org/files/v3.3/cmake-3.3.2.tar.gz
tar -zxvf cmake-3.3.2.tar.gz
##进入cmake目录,设置、编译、安装
cd cmake-3.3.2/ 
./bootstrap 
# 就是这样执行这个命令的,最后会提示下面这句话
> CMake has bootstrapped.  Now run gmake.
gmake 
gmake install    

##安装bison
yum install  -y bison  

# 安装git
yum install -y git
# 设置上网代理
export  http_proxy="http://192.168.1.105:10809"
export  https_proxy="http://192.168.1.105:10809"
# 取消代理设置
unset http_proxy
unset https_proxy
# 安装anyQ
git clone https://github.com/baidu/AnyQ.git 
# 不管设置或者不设置代理,都无法git clone这个项目

# 那就直接下载安装包解压好了,反正也没啥区别
 cd ../
 # 之前在 cmake3.3.2目录里一直就没出来
 # 如果不小心忘了cd出来 就 mv AnyQ-master ../ 都移动出来就好了
wget https://github.com/baidu/AnyQ/archive/refs/heads/master.zip

# 安装解压软件
yum install -y unzip zip

# 解压到当前文件夹
unzip master.zip

cd AnyQ-master/
mkdir build && cd build && cmake .. && make
# 等着编译就好了

3.1.2 编译

很不幸,在一开始的时候,这个东西就遇到了一个大困难

Scanning dependencies of target extern_zlib
[  0%] Creating directories for 'extern_zlib'
[  1%] Performing download step (git clone) for 'extern_zlib'
Cloning into 'extern_zlib'...
error: RPC failed; result=35, HTTP code = 0
fatal: The remote end hung up unexpectedly

这东西还是要走git clone

善意的提醒
接下来的cmake和make速度非常慢,建议在tmux中进行,不然可能会被中断。
但是centos的yum源里没有tmux,所以如果要使用的话,需要手动编译安装,相对麻烦。

tmux使用:

参考:百度 AnyQ 安装

其中cmake … && make 的过程是一个艰难的过程,但凡出现网络卡住的时候,可以ctrl+c中止,然后通过重新执行cmake … && make继续执行,直到完全成功

3.1.3 修改hosts文件

参考:Linux系统上 编译安装百度开源AnyQ(非docker环境)

配置github加速(可选操作)
我用的是更改hosts文件方法,如果你有更好的请告诉我,谢谢

所以这里不用代理,直接进行git clone,并不是无法下载,而是下载的很慢。。。
尝试修改一下hosts吧。

改了之后,比没改能好一点点,起码可以找到这个paddle的地址了

[  0%] Creating directories for 'extern_paddle'
[  1%] Performing download step (git clone) for 'extern_paddle'
Cloning into 'extern_paddle'...
fatal: unable to access 'https://github.com/PaddlePaddle/Paddle.git/': Failed connect to github.com:443; Connection timed out
Cloning into 'extern_paddle'...

这个需要重启网络服务,参考:centos解决bash: service: command not found 错误

yum list | grep initscripts
# 列出可以安装的源
> initscripts.x86_64                        9.49.53-1.el7_9.1              updates
yum install initscripts -y
# 然后安装就好,最后安装成功会提示:
> Complete!
# 安装好之后再进行网络重启
service network restart
# 或者下面这个命令都可以重启
/etc/init.d/network restart

依然很慢,似乎没什么作用。然后。。。反正都是老版本,为什么一定要去github上。
查看cmake文件,
在这里插入图片描述
以其中的paddle.cmake为例,可以看到:
在这里插入图片描述
去gitee上看看,https://gitee.com/paddlepaddle/Paddle,可以发现,也有这个版本(不用管链接里的大小写,这个无所谓)
在这里插入图片描述
改make文件,一个一个试一下。 只需要把github改成gitee即可。
果然,改了之后就开始动起来了
在这里插入图片描述
基本上paddle搞定了之后,后面的好像就会快很多。但是该错的还是会错
在这里插入图片描述
继续从github上转到gitee上,看能不能找到对应的库。不幸的是,基本都找不到,只能终止重来,不断尝试,希望哪次运气好,网络好一些。

发现其中有一个zlib,很久不更新了,而且确实有人把github上的项目转到gitee上,来提高国内下载的速度。。。考虑注册个账号,把那些项目转存过来??

对于zlib.cmake文件,将其中的git链接改为https://gitee.com/zeekim/zlib.git

但是对于大部分的库来说,还是只能不断去ctrl+C终止,然后再cmake .. && make重启。一卡就重来。

3.1.4 继续修改

我没有选择坐以待毙,而是继续折腾,找了好几个人收集的内容:
来自:

# windows 刷新IP配置
ipconfig /flushdns
# linux刷新

service network restart
# 或者下面这个命令都可以重启
/etc/init.d/network restart
vi  /etc/hosts
13.127.152.42 codeload.github.com
151.101.88.133 github.map.fastly.net
151.101.88.133 favicons.githubusercontent.com
151.101.88.133 raw.github.com
151.101.88.133 raw.githubusercontent.com
151.101.88.133 camo.githubusercontent.com
151.101.88.133 cloud.githubusercontent.com
151.101.88.133 avatars.githubusercontent.com
151.101.88.133 avatars0.githubusercontent.com
151.101.88.133 avatars1.githubusercontent.com
151.101.88.133 avatars2.githubusercontent.com
151.101.88.133 avatars3.githubusercontent.com
151.101.88.133 user-images.githubusercontent.com
185.199.111.154 github.githubassets.com
52.69.239.207 api.github.com
52.74.223.119 gist.github.com

# DNS Parsing speed for GitHub
140.82.113.3    github.com
185.199.108.153 assets-cdn.github.com
199.232.69.194  github.global.ssl.fastly.net

然后每次基本都可以按好一个,然后坏掉,然后重新cmake .. && make,继续搞。
随着你不断尝试,每次安好一个包,如下图变化
在这里插入图片描述

在这里插入图片描述
前面这个百分比进度会有变化,同时Built target XXX表示这个包是已经构建好的。正在一步步走向成功。
在这里插入图片描述

3.1.5 切换国内源

最后再extern_protobuffer这里一直卡住,
在这里插入图片描述
确认对应的gitee上有对应的github项目:https://gitee.com/mirrors/protobufsource
在这里插入图片描述
在这里插入图片描述
继续改protobuffer对应的cmake文件。
然后就可以找到咧
在这里插入图片描述
关于glog的安装,查看1.4的意外惊喜。glog搞完,显示下面的提示
在这里插入图片描述
继续安装,
在这里插入图片描述
boost的时候,开始下载文件了。。。等待。速度非常之慢,39M的文件,20k/s的下载。。。
数了一下,cmake/external文件夹中一共有18个.cmake文件,也就是要安装18个东西。。。确实挺漫长的。


根据参考的这几个网友的经验,这个东西编译下来,超级慢。。。而且网友似乎都是硬刚github,没有转到gitee或别的地方去。那就这样吧。
在这里插入图片描述

折腾下来,差不多从下午3点到

3.2 打包成镜像

这个东西按起来确实太复杂了,还是要稳一点,持久化一下,不然下次再来一遍也不知道还有没有这个运气。

同时为了也可以重新映射到其他端口,最好是将其保存成一个镜像。

# ctrl+C 终止刚刚的./run_server服务
# exit 退出容器

# 容器中执行
[root@a14447576c14 build] #exit
> exit
# 服务器中执行
(base) /ws/huangshan/paddle21 > docker ps -a|grep centos                        
a14447576c14 centos:centos7 "/bin/bash" 4 days ago Up 4 days 0.0.0.0:8888->8999/tcp centos-anyq

# 将刚刚安装配置好的anyQ容器保存为一个镜像
docker commit -m "FAQ anyq image" -a "huangshan" centos-anyq anyq/base
# centos-anyq 是要保存为容器的镜像名称
# anyq/base 是要保存的镜像名称

# 然后等一会就好了
(base) /ws/huangshan/paddle21 > docker images |grep anyq                                              
anyq/base  latest  526d859789e4   34 seconds ago   8.47GB
# 可以看到,虽然基础镜像centos只有400多MB,但是paddle就有这么大。。。

查看一下docker commit命令的帮助信息

(base) /ws/huangshan/paddle21 > docker commit --help                                     
Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
# 从容器的变化中创建一个镜像 options 和repository都是可选的,可以直接提交到本地docker列表中,不一定要建立一个有网络url链接的docker hub,供别人使用
Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

搜索可知:容器可以保存为镜像!(可以不通过dockerfile构建镜像)


其他代码示例:

# 启动一个centos6.8的镜像
docker pull  centos:6.8
docker run -it -p 1022:22 centos:6.8  /bin/bash
# 将容器提交为镜像
docker commit brave_mcclintock  centos6-ssh
# 使用新的镜像启动容器
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D

所以重点就是要有一个本地的docker hub或者什么的,把这个容器存的镜像放到一定的位置上去。
或者另一个比较清晰的例子

$ sudo docker commit <当前运行的container id> <仓库名称>:<tag>
$ sudo docker save -o <仓库名称>-<tag>.img <仓库名称>:<tag>
# 示例如下:
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
111111111111        222222222222        "/bin/bash"   5 minutes ago       Up 5 minutes                                       jello
$ sudo docker commit 111111111111 bash:1.0
$ sudo docker save -o bash-1.0.img bash:1.0

参考:

3.3 意外惊喜

Gitee上有一个专题,就叫mirror,国内镜像的意思 ,https://gitee.com/mirrors
在这里插入图片描述
里面包含一些常用库的镜像,虽然有点卑微,但是十分感谢,直接进入仓库,进行搜索,例如:
在这里插入图片描述
就可以找到国内镜像咧,https://gitee.com/mirrors/glog,然后就可以继续去改cmake文件里的链接咧。

3.4 不幸的事

3.4.1 protobuffer的submodule问题

fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
Cloning into 'extern_protobuf'...
fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
Cloning into 'extern_protobuf'...
fatal: unable to access 'https://github.com/google/protobuf.git/': Encountered end of file
-- Had to git clone more than once:
          3 times.
CMake Error at /home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake:40 (message):
  Failed to clone repository: 'https://github.com/google/protobuf.git'


make[5]: *** [third_party/protobuf/src/extern_protobuf-stamp/extern_protobuf-download] Error 1
make[4]: *** [CMakeFiles/extern_protobuf.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [third_party/paddle/src/extern_paddle-stamp/extern_paddle-build] Error 2
make[1]: *** [CMakeFiles/extern_paddle.dir/all] Error 2
make: *** [all] Error 2

切换到/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake 这个文件中,可以看到,如果出错,其实是会重新下载protobuf这个库的,所以还是要再改一遍。在这个文件里也改掉。

vi /home/AnyQ-master/cmake/external/protobuf.cmake
vi /home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/tmp/extern_protobuf-gitclone.cmake
https://gitee.com/mirrors/protobufsource
# try the clone 3 times incase there is an odd git clone issue
set(error_code 1)
set(number_of_tries 0)
while(error_code AND number_of_tries LESS 3)
  execute_process(
    COMMAND "/usr/bin/git" clone "https://github.com/google/protobuf.git" "extern_protobuf"
    WORKING_DIRECTORY "/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src"
    RESULT_VARIABLE error_code
    )
  math(EXPR number_of_tries "${number_of_tries} + 1")
endwhile()
if(number_of_tries GREATER 1)
  message(STATUS "Had to git clone more than once:
          ${number_of_tries} times.")
endif()
if(error_code)
  message(FATAL_ERROR "Failed to clone repository: 'https://github.com/google/protobuf.git'")
endif()

改了之后还有个错误

Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'third_party/benchmark'
Cloning into 'third_party/benchmark'...
error: RPC failed; result=35, HTTP code = 0
fatal: The remote end hung up unexpectedly
Clone of 'https://github.com/google/benchmark.git' into submodule path 'third_party/benchmark' failed

可以看出来,错的是third_party/benchmark所以这部分出错对应的代码是:

execute_process(
  COMMAND "/usr/bin/git" submodule update --recursive
  WORKING_DIRECTORY "/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf"
  RESULT_VARIABLE error_code
  )
if(error_code)
  message(FATAL_ERROR "Failed to update submodules in: '/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf'")
endif()

比较幸运的是,竟然搜到了一个一样的错误,哈哈哈,

都是编译的时候出错,也都是因为github下载的问题。

所以要找一下对应于protobuf的git repo位置,其实就是上面提示的/home/AnyQ-master/build/third_party/install/paddle/third_party/protobuf/src/extern_protobuf这里。
在这里插入图片描述

 git branch
* (detached from v3.1.0)
  master

确认版本是3.1,但是3.1版本的.gitmodules文件并不在最外层,需要找一下.

参考:git submodule 的使用
git status,如果有第三方库,就会看到gitmodules文件(但是不知道为什么,之前就没看到)

[root@a14447576c14 extern_protobuf]# git status
# HEAD detached at 9f75c5a
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    third_party/benchmark
#
no changes added to commit (use "git add" and/or "git commit -a")

其实可以看到目录下有
在这里插入图片描述
然后点进去改掉里面的url地址即可

[submodule "third_party/benchmark"]
        path = third_party/benchmark
        url = https://github.com/google/benchmark.git
 # url改为
https://gitee.com/mirrors/benchmark

修改之后,虽然显示的还是Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'third_party/benchmark' Cloning into 'third_party/benchmark',但是已经可以继续编译下去了,证明修改生效了。

[ 24%] Performing download step for 'extern_xgboost'
Cloning into 'xgboost'...
fatal: unable to access 'https://github.com/dmlc/xgboost.git/': Encountered end of file
make[2]: *** [third_party/xgboost/src/extern_xgboost-stamp/extern_xgboost-download] Error 128
make[1]: *** [CMakeFiles/extern_xgboost.dir/all] Error 2
make: *** [all] Error 2

3.4.2 xgboost文件夹问题

继续卡主了,考虑把这个文件也改成国内镜像好了,也确实找到了,https://gitee.com/mirrors/xgboost
改了源就好多了,贼快
在这里插入图片描述
但是这东西也有submodule,而且还有三个。。

Submodule 'cub' (https://github.com/NVlabs/cub) registered for path 'cub'
Submodule 'dmlc-core' (https://github.com/dmlc/dmlc-core) registered for path 'dmlc-core'
Submodule 'gputreeshap' (https://github.com/rapidsai/gputreeshap.git) registered for path 'gputreeshap'
Cloning into 'cub'...

也找找看,能不能改吧。cub太小众了,根本没有。就多试一次,或者再找点hosts,记得重启一下service。


重新打断再运行,继续出错:

[ 20%] Performing download step for 'extern_xgboost'
fatal: destination path 'xgboost' already exists and is not an empty directory.
make[2]: *** [third_party/xgboost/src/extern_xgboost-stamp/extern_xgboost-download] Error 128
make[1]: *** [CMakeFiles/extern_xgboost.dir/all] Error 2
make: *** [all] Error 2

文件夹删了重新运行。就是删除下面这个目录

/home/AnyQ-master/build/third_party/xgboost

# 如果还在build目录下的话 就
rm -rf /third_party/xgboost

另外,参考:

如果多次编译开始报错:/data/xiaoyichao/projects/AnyQ/build/third_party/xgboost 的文件夹不为空这样的信息,则需要手动删除一下这个文件下的内容。

3.4.3 make

[ 18%] No patch step for 'extern_xgboost'
[ 19%] No update step for 'extern_xgboost'
[ 19%] No configure step for 'extern_xgboost'
[ 20%] No build step for 'extern_xgboost'
[ 20%] Performing install step for 'extern_xgboost'
Makefile:31: MAKE [make] - checked OK
# 然后下面报了一些warning,但是不影响,还是继续运行了

在这里插入图片描述
然后下载,等待。
然后就一屏幕一屏幕的输出信息,各种安装什么的。中间还是不断有新的包从github上clone,对网络的依赖非常高!


openssl

Scanning dependencies of target extern_leveldb
[ 32%] Creating directories for 'extern_leveldb'
[ 32%] Performing download step for 'extern_leveldb'
Cloning into 'leveldb'...
fatal: unable to access 'https://github.com/google/leveldb.git/': Encountered end of file
make[2]: *** [third_party/leveldb/src/extern_leveldb-stamp/extern_leveldb-download] Error 128
make[1]: *** [CMakeFiles/extern_leveldb.dir/all] Error 2
make: *** [all] Error 2

运气不好,网络就会一致报错

如果是 openssl报错,还是可以改cmake文件,转到gitee源进行下载。
https://gitee.com/mirrors/openssl

# 在build目录时,执行以下
vi ../cmake/external/openssl.cmake

# 然后把链接替换为
https://gitee.com/mirrors/openssl.git

然后再执行,不然确实太慢了


bcpc
没有找到国内源。。
在这里插入图片描述
可以看到整体进度是60%了,虽然这个确实不好下载。。但是,等着吧。
在这里插入图片描述
试了大概7、8遍,才有反应。只能靠干等,也许下午5点github响应会好一些???

这个编译完之后又是大屏的输出信息,还有warning,没事,不管。也会不断显示进度,98%。。。。。
在这里插入图片描述
编译成功!


3. 问题记录

3.1 问题和解决

3.1.1 安装cmake

cmake安装参考

先查看系统版本

(base) ~ ! > cat /proc/version
> Linux version 4.4.0-186-generic (buildd@lcy01-amd64-002) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020
(base) ~ > uname -a      
> Linux ubuntu 4.4.0-186-generic #216-Ubuntu SMP Wed Jul 1 05:34:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

看到自己本地的系统是16.04,根据自己的系统版本去找对应的安装方式。

cmake网站链接:https://cmake.org/download/

  • 截止到2021.10.14,cmake已经到了3.21.3,建议的是 cmake 3.0以上(推荐3.2.2版本)
  • 参考其他博客,安一个新的应该没啥问题。
  • 从官网中下载Binary distributions版本的,该版本是编译过的,下载后解压就可以用。

在这里插入图片描述

# 下载3.20.6的版本,其实都是从github上下载的,所以可能会有些慢。
wget https://github.com/Kitware/CMake/releases/download/v3.20.6/cmake-3.20.6-linux-x86_64.tar.gz

# 解压
tar zxvf cmake-3.20.6-linux-x86_64.tar.gz

# 解压后可以稍微查看一下这个文件夹的内容
tree -L 2 cmake-3.20.6-linux-x86_64

在这里插入图片描述
bin下面有各种cmake家族的产品程序。

然后为了让系统可以找到cmake命令,有两种方式

  1. 修改配置(这里有一定的隐患,我目前用的zsh的shell,而不是bash的shell)
    # 打开个人path配置
    vim~/.bashrc
    
    # 在末尾添加如下的内容
    export PATH=/home/hsn/cmake-3.15.2-Linux-x86_64/bin:$PATH
    
    # 接着在终端source一下.bashrc文件让path立即生效
    source ~/.bashrc
    
  2. 创建软链接(还是直接把这个cmake软件放到系统默认目录下好了)
    # 这里注意路径
    mv cmake-3.20.6-linux-x86_64 /opt/cmake-3.20.6
    # 注意 上面命令执行一次,那个文件夹就移动走了,可能需要sudo执行
    cd /opt
    ls
    # 就可以看到转移后的情况了
    # 然后创建软链接 可能也需要 sudo
    ln -sf /opt/cmake-3.20.6/bin/*  /usr/bin/
    

配置好了之后,使用cmake --version看一下

cmake --version     
> cmake version 3.20.6
CMake suite maintained and supported by Kitware (kitware.com/cmake).

3.1.2 bison安装报错

dpkg: error processing package ppp (–configure): subprocess installed post-installation script ret

这主要是由于不完全安装导致的。解决方式是删除或编辑安装信息文件。

update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
insserv: Service gdm has to be enabled to start service pppd-dns
insserv: exiting now!
update-rc.d: error: insserv rejected the script header
dpkg: error processing package `ppp` (--configure):
 subprocess installed post-installation script returned error exit status 1
Setting up m4 (1.4.17-2ubuntu1) ...
Setting up libbison-dev:amd64 (2:3.0.2.dfsg-2) ...
Setting up bison (2:3.0.2.dfsg-2) ...
update-alternatives: using /usr/bin/bison.yacc to provide /usr/bin/yacc (yacc) in auto mode
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for install-info (6.1.0.dfsg.1-5) ...
Errors were encountered while processing:
 ppp
E: Sub-process /usr/bin/dpkg returned an error code (1)

参考:


$ sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
# 移动到别的新房
$ sudo mkdir /var/lib/dpkg/info/
# 新建一个文件
$ sudo apt-get update
# 重新安装素有的
$ sudo apt-get -f install
# 上面那步执行完就是下面的截图,安装bison时,出错时候的依赖包是 ppp
$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
# 把新生效的都移回去
$ sudo rm -rf /var/lib/dpkg/info
# 删除刚刚建的用作临时操作的文件夹
$ sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
# 再整个都移回来

在这里插入图片描述

3.1.3 java jdk安装

  • 但是并不建议直接修改配置文件,
sudo add-apt-repository ppa:openjdk-r/ppa
> sudo: add-apt-repository: command not found

sudo apt-get install software-properties-common
# 为了使用 命令

sudo apt-get update

参考:

3.2 参考:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
要实现提取问题中的参数并调用API,你需要进行以下步骤: 1. 对问题进行自然语言处理。你可以使用Python中的自然语言处理库,例如NLTK、spaCy、Stanford NLP等,来对问题进行分析和解析。 2. 从问题中提取参数。一旦你对问题进行了解析,就可以使用词性标注和命名实体识别等技术来提取参数。例如,如果问题是“北京天气怎么样?”,你可以使用命名实体识别来找到“北京”这个地点的参数。 3. 调用API。一旦你提取出了参数,就可以使用它们来调用相应的API。例如,如果你想要查询北京的天气,你可以使用天气API,并将“北京”作为参数传递给该API。 下面是一个简单的Python代码示例,演示如何从问题中提取参数并调用API: ```python import requests import json import nltk # 问题 question = "北京天气怎么样?" # 分词和词性标注 tokens = nltk.word_tokenize(question) tags = nltk.pos_tag(tokens) # 命名实体识别 ne_chunked = nltk.ne_chunk(tags) entities = [] for chunk in ne_chunked: if hasattr(chunk, 'label') and chunk.label() == 'GPE': entities.append(' '.join(c[0] for c in chunk)) # 调用API if len(entities) > 0: url = "http://api.openweathermap.org/data/2.5/weather?q={}&appid=your_app_id".format(entities[0]) response = requests.get(url) data = json.loads(response.text) print("天气:{}".format(data['weather'][0]['description'])) else: print("无法识别问题中的地点参数") ``` 在这个示例中,我们使用NLTK库对问题进行了分词和词性标注,然后使用命名实体识别找到了问题中的地点参数。接着,我们使用天气API来查询该地点的天气,并将查询结果输出到控制台中。 希望这个示例可以帮助你实现提取问题中的参数并调用API的功能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吨吨不打野

解决了问题,觉得还行就给点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值