解决R语言找不到系统库导致的报错
1、基本需知
1.1、系统库
系统库(System library)是一组预先编写和编译好的软件模块集合,用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供,并且在系统安装过程中被预装或者用户可以额外安装。
常见的系统库包括标准C库(如libc)、图形用户界面库(如GTK+、Qt)、网络库(如libcurl)、数据库访问库(如libmysqlclient)、加密库(如OpenSSL)等。这些库在不同的操作系统上可能会有不同的实现和命名方式,但它们的作用都是为了简化开发者在特定操作系统上编写软件的任务,同时提供一定程度的抽象和封装。
1.2、conda 安装环境
conda 在安装环境时,会安装一个独立的、完整的开发环境,主要用于编译和运行各种软件和库。包括基础系统组件、图形和字体库、网络和安全类、其它工具和库以及语言支持。
大部分列出的包都是共享库(Shared Libraries),这些库通常用于在多个程序之间共享代码和资源,以提高效率和节省存储空间。共享库可以在程序运行时动态加载,而不是每个程序都包含完整的代码副本。
在你列出的包中,如 libgcc
, libgfortran
, libglib
, libpng
, libtiff
, libxml2
等,它们通常是编译后的二进制文件,可以被多个程序同时使用。这些库通常被开发人员用来链接到他们的程序中,以便利用其提供的功能,如数学计算、图形渲染、文本处理等。
虽然大部分包是共享库,但也包括一些实用程序(如 make
, curl
)和编译工具(如 gcc
, g++
, gfortran
),这些工具本身不是共享库,而是可执行程序,用于构建和管理软件项目。
(base) root@LAPTOP:~# conda create -n mytest r-base
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 23.1.0
latest version: 24.5.0Please update conda by running
$ conda update -n base -c defaults conda
Or to minimize the number of packages updated during conda update use
conda install conda=24.5.0
## Package Plan ##
environment location: /root/anaconda3/envs/mytest
added / updated specs:
- r-base
The following NEW packages will be INSTALLED:_libgcc_mutex anaconda/pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex anaconda/pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
bzip2 anaconda/pkgs/main/linux-64::bzip2-1.0.8-h5eee18b_6
cairo anaconda/pkgs/main/linux-64::cairo-1.16.0-hb05425b_5
curl anaconda/pkgs/free/linux-64::curl-7.26.0-1
expat anaconda/pkgs/main/linux-64::expat-2.6.2-h6a678d5_0
freetype anaconda/pkgs/main/linux-64::freetype-2.12.1-h4a9f257_0
fribidi anaconda/pkgs/main/linux-64::fribidi-1.0.10-h7b6447c_0
gcc_impl_linux-64 anaconda/pkgs/main/linux-64::gcc_impl_linux-64-11.2.0-h1234567_1
gcc_linux-64 anaconda/pkgs/main/linux-64::gcc_linux-64-11.2.0-h5c386dc_0
gfortran_linux-64 anaconda/pkgs/main/linux-64::gfortran_linux-64-11.2.0-hc2dff05_0
icu anaconda/pkgs/main/linux-64::icu-73.1-h6a678d5_0
jpeg anaconda/pkgs/main/linux-64::jpeg-9e-h5eee18b_1
libcurl anaconda/pkgs/main/linux-64::libcurl-8.7.1-h251f7ec_0
libopenblas anaconda/pkgs/main/linux-64::libopenblas-0.3.21-h043d6bf_0
libxml2 anaconda/pkgs/main/linux-64::libxml2-2.10.4-hfdd30dd_2
lz4-c anaconda/pkgs/main/linux-64::lz4-c-1.9.4-h6a678d5_1
make anaconda/pkgs/main/linux-64::make-4.2.1-h1bed415_1
ncurses anaconda/pkgs/main/linux-64::ncurses-6.4-h6a678d5_0
openssl anaconda/pkgs/main/linux-64::openssl-3.0.14-h5eee18b_0
python anaconda/pkgs/free/linux-64::python-1.0.1-0
r-base anaconda/pkgs/r/linux-64::r-base-4.3.1-h1ae530e_0
readline anaconda/pkgs/main/linux-64::readline-8.2-h5eee18b_0
-
基础系统组件:
_libgcc_mutex
,_openmp_mutex
,_r-mutex
,_sysroot_linux-64_curr_repodata_hack
: 这些是系统级别的支持包,用于处理多线程、库依赖和系统根目录相关问题。binutils
: 二进制工具集,用于创建、管理和操作二进制文件。gcc
,g++
,gfortran
: GNU编译器集合,用于编译C、C++和Fortran程序。make
: 编译工具,用于自动化构建程序。ld
: 链接器,将多个目标文件链接成一个可执行文件。kernel-headers
: 内核头文件,用于编译依赖于系统内核的软件。ncurses
: 控制台屏幕处理库,用于在终端上输出文本界面。openssl
: 加密库,提供安全套接字层(SSL)功能。readline
: 提供命令行编辑功能,如历史记录和命令补全。zlib
,bzip2
,xz
,lz4
,zstd
: 压缩和解压库,用于处理压缩文件。
-
图形和字体库:
cairo
,fontconfig
,freetype
,harfbuzz
,libpng
,libtiff
,pango
,pixman
: 图形和字体处理库,用于渲染和处理文字和图像。libjpeg
,libwebp
: 图像处理库,支持JPEG和WebP格式。
-
网络和安全:
curl
: URL传输工具,用于从各种网络协议下载数据。libcurl
,libnghttp2
,libssh2
: 网络通信库,支持HTTP/2和SSH协议。
-
其他工具和库:
expat
,libxml2
: XML解析库。libffi
: 提供对外部函数接口的支持。libev
: 事件循环库,用于事件驱动程序设计。libiconv
: 字符集转换库。libuuid
: UUID生成库,用于唯一标识符的生成。tk
,tktable
: Tcl/Tk图形库,用于构建图形用户界面(GUI)应用程序。
-
语言支持:
python
,r-base
: Python和R编程语言的基础安装包。
1.3、以 libcurl
系统库为例
libcurl
是一个广泛使用的开源库,用于支持各种网络协议的数据传输,如HTTP、FTP、SMTP等。它允许开发者通过简单的API调用来进行网络数据的发送和接收,无论是下载文件、上传数据还是与Web服务进行交互,都可以借助 libcurl
轻松实现。以下为 libcurl 库具象化(万物皆文件Everything is a file)。libcurl包括头文件(.h)和共享链接库(.so)。
(base) root@LAPTOP:~# tree /root/anaconda3/envs/mytest/include/curl
/root/anaconda3/envs/mytest/include/curl
├── curl.h
├── curlbuild.h
├── curlrules.h
├── curlver.h
├── easy.h
├── header.h
├── mprintf.h
├── multi.h
├── options.h
├── stdcheaders.h
├── system.h
├── typecheck-gcc.h
├── urlapi.h
└── websockets.h
(base) root@LAPTOP-D6CGI3Q6:~/anaconda3/envs/mytest/lib# ls|grep libcurl
libcurl.so
libcurl.so.4
libcurl.so.4.2.0
libcurl.so.4.8.0
其它应用可通过 libcurl 共享库的共享目标文件(shared object file, 即.so)实现所需功能。
1.4、R安装包的一般过程
以下为安装 ragg 包时输出内容的摘要,*代表一级标题,**代表二级标题,以此类推。可以看到R安装包过程如下:
① 通过url下载所需的包和该包的依赖
② 开始安装 ragg,解压缩以及MD5检查
③ 使用 pkg-config 检查安装此包所需的系统库 freetype2、libpng等系统库的头文件路径(PKG_CFLAGS),以及库文件路径(library path)
④ 建库:使用 gcc 编译器编译下载的R包,并编译和链接系统库,安装完成
> install.packages('ragg')
trying URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/ragg_1.3.2.tar.gz'
Content type 'application/octet-stream' length 430366 bytes (420 KB)
==================================================
downloaded 420 KB
* installing *source* package ‘ragg’ ...
** package ‘ragg’ successfully unpacked and MD5 sums checked
** using staged installation
Found pkg-config cflags and libs!
Using PKG_CFLAGS=-I/root/anaconda3/envs/mytest/include/freetype2 -I/root/anaconda3/envs/mytest/include/libpng16 -I/root/anaconda3/envs/mytest/include -I/root/anaconda3/envs/mytest/include/webp -I/root/anaconda3/envs/mytest/include
Using PKG_LIBS=-L/root/anaconda3/envs/mytest/lib -lfreetype -lpng16 -ltiff -ljpeg
** libs
using C++ compiler: ‘x86_64-conda-linux-gnu-c++ (Anaconda gcc) 11.2.0’
x86_64-conda-linux-gnu-c++ -std=gnu++17 -I"/root/anaconda3/envs/mytest/lib/R/include" -DNDEBUG -I./agg/include -I/root/anaconda3/envs/mytest/include/freetype2 -I/root/anaconda3/envs/mytest/include/libpng16 -I/root/anaconda3/envs/mytest/include -I/root/anaconda3/envs/mytest/include/webp -I/root/anaconda3/envs/mytest/include -I'/root/anaconda3/envs/mytest/lib/R/library/systemfonts/include' -I'/root/anaconda3/envs/mytest/lib/R/library/textshaping/include' -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /root/anaconda3/envs/mytest/include -I/root/anaconda3/envs/mytest/include -Wl,-rpath-link,/root/anaconda3/envs/mytest/lib -fpic -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /root/anaconda3/envs/mytest/include -fdebug-prefix-map=/workspace/croot/r-base_1695428141831/work=/usr/local/src/conda/r-base-4.3.1 -fdebug-prefix-map=/root/anaconda3/envs/mytest=/usr/local/src/conda-prefix -c capture_dev.cpp -o capture_dev.o
x86_64-conda-linux-gnu-ar rcs agg/libstatagg.a agg/src/agg_curves.o agg/src/agg_font_freetype.o agg/src/agg_image_filters.o agg/src/agg_trans_affine.o agg/src/agg_vcgen_dash.o agg/src/agg_vcgen_stroke.o
x86_64-conda-linux-gnu-c++ -std=gnu++17 -shared -L/root/anaconda3/envs/mytest/lib/R/lib -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,-rpath,/root/anaconda3/envs/mytest/lib -Wl,-rpath-link,/root/anaconda3/envs/mytest/lib -L/root/anaconda3/envs/mytest/lib -o ragg.so capture_dev.o init.o jpeg_dev.o png_dev.o ppm_dev.o tiff_dev.o -Lagg -lstatagg -L/root/anaconda3/envs/mytest/lib -lfreetype -lpng16 -ltiff -ljpeg -L/root/anaconda3/envs/mytest/lib/R/lib -lR
installing to /root/anaconda3/envs/mytest/lib/R/library/00LOCK-ragg/00new/ragg/libs
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices
** testing if installed package can be loaded from temporary location
** checking absolute paths in shared objects and dynamic libraries
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (ragg)
1.5、编译与链接
1.5.1、编译器
编译器是将高级编程语言(如C、C++、Java等)编写的源代码文件转换为机器语言或中间代码的工具。
1.5.2、链接器
链接器用于将编译器生成的目标文件(通常是二进制目标文件)链接成最终的可执行程序或库文件。
1.6、pkg-config 工具
pkg-config
是一个用于管理和查询软件包配置信息的工具。在编译和链接过程中,经常需要指定软件包的头文件路径(include path)和库文件路径(library path),以及其他编译和链接选项。而 pkg-config
则提供了一种标准化的方式来获取这些信息。
安装R包时,通过调用 pkg-config 工具获得安装某包所需系统库的头文件以及库文件的路径!
1.6.1、pkg-config 工具调用
在安装R包时,pkg-config 工具被调用的过程类似如下
which pkg-config
# 查看该工具的路径:/usr/bin/pkg-config
# 一般系统层面上会安装该工具
pkg-config --cflags libcurl
# 查看 libcurl 的头文件路径和编译选项:-I/root/anaconda3/envs/mytest/include
pkg-config --libs libcurl
# 查看 libcurl 的库文件路径和链接选项:-L/root/anaconda3/envs/mytest/lib -lcurl
1.6.2、pkg-config 的包 (库) 配置文件
pkg-config 是如何知道这些库文件的头文件和库文件路径,这些信息存储在哪呢?为什么我一用`pkg-config --cflags libcurl`这个命令就会输出 libcurl的头文件路径?
(base) root@LAPTOP:~/anaconda3/envs/mytest/lib/pkgconfig# ls|grep libcurl.pc
libcurl.pc
因为在环境的 lib/pkgconfig 路径下包含了 libcurl 这个包的包配置文件(package config,即.pc),pkg-config 可读取整个文件,然后输出这个包的头文件和库文件路径。让我们看一下 libcurl.pc文件是否存了这些信息
(base) root@LAPTOP:~/anaconda3/envs/mytest/lib/pkgconfig# cat libcurl.pc
#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
# SPDX-License-Identifier: curl
#
############################################################################ This should most probably benefit from getting a "Requires:" field added
# dynamically by configure.
#
prefix=/root/anaconda3/envs/cellchat
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
supported_protocols="DICT FILE FTP FTPS GOPHER GOPHERS HTTP HTTPS IMAP IMAPS IPFS IPNS MQTT POP3 POP3S RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP"
supported_features="AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile NTLM SPNEGO SSL TLS-SRP UnixSockets alt-svc libz threadsafe"Name: libcurl
URL: https://curl.se/
Description: Library to transfer files with ftp, http, etc.
Version: 8.7.1
Libs: -L${libdir} -lcurl
Libs.private: -lnghttp2 -lssh2 -lssh2 -lssl -lcrypto -lssl -lcrypto -L/root/anaconda3/envs/cellchat/lib -lgssapi_krb5 -lz -pthread
Cflags: -I${includedir}
1.6.3、pkg-config 的 pkgconfig 路径
pkg-config 工具为什么知道自己要去 pkgconfig 路径下找共享库的配置文件(.pc)?如上所述,pkg-config工具在系统上默认安装,它也会有默认设置的 pkgconfig 路径。当R安装包时就会使用默认 pkgconfig 文件下的共享库配置文件。使用 pkg-config --variable pc_path pkg-config 命令可知道该工具默认从哪个路径查找库的配置文件。
pkg-config --variable pc_path pkg-config
# /usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
2、问题
2.1、找不到系统库
Package libtiff-4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libtiff-4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libtiff-4' found
Package libjpeg was not found in the pkg-config search path.
Perhaps you should add the directory containing `libjpeg.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libjpeg' foundUsing PKG_CFLAGS=
Using PKG_LIBS=-lfreetype -lpng16 -ltiff -lz -ljpeg -lbz2
2.1、找到系统库,但不可使用
> install.packages('ragg')
trying URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/ragg_1.3.2.tar.gz'
Content type 'application/octet-stream' length 430366 bytes (420 KB)
==================================================
downloaded 420 KB* installing *source* package ‘ragg’ ...
** package ‘ragg’ successfully unpacked and MD5 sums checked
** using staged installation
Found pkg-config cflags and libs!
Using PKG_CFLAGS=-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu
Using PKG_LIBS=-lfreetype -lpng16 -lz -ltiff -ljpeg
-----------------------------[ ANTICONF ]-------------------------------
Configuration failed to find one of freetype2 libpng libtiff-4 libjpeg. Try installing:
* deb: libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev (Debian, Ubuntu, etc)
* rpm: freetype-devel libpng-devel libtiff-devel libjpeg-devel (Fedora, CentOS, RHEL)
* csw: libfreetype_dev libpng16_dev libtiff_dev libjpeg_dev (Solaris)
If freetype2 libpng libtiff-4 libjpeg is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a freetype2 libpng libtiff-4 libjpeg.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
3、报错原因
报错原因可能出现在前面所述的前面所述的`R安装包的一般过程`的任意一个环境,这里只针对第四步过程中产生报错的原因进行分析。
① 并未安装共享库
② pkg-config 工具未添加到 PATH 路径,导致在终端中不能直接键入pkg-config使用该工具
③ pkgconfig 路径错误: 如pkg-config工具默认的pkgconfig路径并包含某个库的配置文件 (.pc)
这对应报错中的提示
Configuration failed to find one of freetype2 libpng libtiff-4 libjpeg. Try installing:
* deb: libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev (Debian, Ubuntu, etc)
* rpm: freetype-devel libpng-devel libtiff-devel libjpeg-devel (Fedora, CentOS, RHEL)
* csw: libfreetype_dev libpng16_dev libtiff_dev libjpeg_dev (Solaris)
If freetype2 libpng libtiff-4 libjpeg is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a freetype2 libpng libtiff-4 libjpeg.pc file.
4、解决方法
4.1、安装所需的共享库
sudo apt install libcurl4-openssl-dev
# 使用系统的库管理工具apt安装,会默认安装到当前conda环境
conda install libcurl
# 使用conda 安装,同样安装到当前conda环境
4.2、安装pkg-config或将其添加到PATH
系统的base环境都会安装pkg-config工具,并已经添加到系统路径。如果想在conda环境安装pkg-config,如果直接在当前conda的虚拟环境下安装pkg-config,会立刻解决问题!!因为在当前环境安装pkg-config,当前环境中的pkg-config的pkgconfig路径就是当前虚拟环境的共享库路径!!
conda install pkg-config
或
sudo apt install pkg-config
一般安装完 pkg-config,就可直接使用,如果不行,需要将其添加到系统环境
export PATH="/path/to/pkg-config:$PATH"
# 这只会改变当前 shell,重新打开新shell 就会失效echo 'export PATH="/path/to/pkg-config:$PATH"' >> ~/.bashrc
# 添加到.bashrc文件,之后都有效
soure ~/.bashrc
# 在当前shell立即生效
export LD_LIBRARY_PATH=/root/anaconda3/envs/test/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/root/anaconda3/envs/test/lib/pkgconfig:$PKG_CONFIG_PATH
export LDFLAGS="-L/root/anaconda3/envs/test/lib $LDFLAGS"
export CPPFLAGS="-I/root/anaconda3/envs/test/include $CPPFLAGS"
# 如果还是不行,可尝试
4.3、在shell中修改pkgconfig路径设置
pkg-config 工具并未提供直接修改 pkgconfig 路径的选项,不能像pkg-config --variable pc_path pkg-config 查看pkgconfig 路径一样修改。只能通过修改环境变量的方式修改。
export PKG_CONFIG_PATH=/root/anaconda3/envs/mytest/lib/pkgconfig:$PKG_CONFIG_PATH
# 这只会改变当前 shell,重新打开新shell 就会失效
-
echo 'PKG_CONFIG_PATH=/root/anaconda3/envs/mytest/lib/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
# 添加到.bashrc文件,之后都有效
soure ~/.bashrc
# 在当前shell立即生效
4.5、在R语言中修改pkgconfig路径设置
Sys.getenv() # 获得当前环境的所有环境变量
Sys.setenv(PKG_CONFIG_PATH="/root/anaconda3/envs/mytest/lib/pkgconfig")
4.6、使用R 命令行工具手动安装
这种是最复杂的,如果实在不行可尝试自己指定系统库的头文件和库文件路径
R CMD INSTALL ragg --configure-vars='INCLUDE_DIR=/root/anaconda3/envs/test/include LIB_DIR=/root/anaconda3/envs/test/lib'
4.7、直接在R中指定所需系统库的路径
这种是最复杂的,如果实在不行可尝试自己指定系统库的头文件和库文件路径
install.packages('ragg', type = 'source', configure.vars = 'INCLUDE_DIR=/root/anaconda3/envs/test/include LIB_DIR=/root/anaconda3/envs/test/lib')
同在shell中
Rscript -e "install.packages('ragg', type = 'source', configure.vars = 'INCLUDE_DIR=/root/anaconda3/envs/test/include LIB_DIR=/root/anaconda3/envs/test/lib')"
相关文章:

解决R语言找不到系统库导致的报错
1、基本需知 1.1、系统库 系统库(System library)是一组预先编写和编译好的软件模块集合,用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供,并且在系统安装过程中被预装或者用户可以额…...

Java高并发理论基础
并发级别 由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,我们可以把并发的级别分为 阻塞、无饥饿、无障碍、无锁、无等待 几种。 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执…...

Spring事件机制
文章目录 一、Spring事件二、实现Spring事件1、自定义事件2、事件监听器2.1 实现ApplicationListener接口2.2 EventListener2.3 TransactionalEventListener 3、事件发布4、异步使用 三、EventBus1、事件模式2、EventBus三要素3、同步事件3.1 定义事件类3.2 定义事件监听3.3 测…...
vue+canvas音频可视化
1.代码 <template><div class"subGuide"><canvas id"canvas"></canvas><br><audio id"audio" src"./audio.mp3" controls></audio></div> </template><script> export…...
俊昭stm32笔记
stm32——中断优先级 stm32——创建基础工程模板stm32——创建基础工程模板-CSDN博客 stm32——MCU启动方式stm32——MCU启动方式_stm32调试时程序启动方式-CSDN博客 stm32——串口stm32——串口_stm32 串口-CSDN博客 stm32——lcd液晶显示stm32——lcd液晶显示-CSDN博客...

W30-python03-pytest+selenium+allure访问百度网站实例
此篇文章为总结性,将pystest、selenium、allure结合起来 功能如下,web自动化,输入baidu网站,搜索“雷军”、打开网页中第一条内容 pytestsel.py如下: import time import re import allure import pytest from tools…...
如何在 Debian 8 上安装和使用 PostgreSQL 9.4
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 关系型数据库是满足多种需求的数据组织的基石。它们支持从在线购物到火箭发射等各种应用。PostgreSQL 是一种历史悠久但仍然活跃的…...
【微信小程序】微信小程序设置本地背景图片在真机无法显示的解决方案
微信小程序设置本地背景图片在真机无法显示的解决方案 在开发微信小程序时,很多开发者会遇到一个常见的问题:在调试环境中设置本地背景图片可以正常显示,但在真机上却无法显示。本文将详细探讨这一问题的原因,并提供三种解决方案…...

Arthas在线诊断案例实战整理
Arthas - Java 应用诊断利器 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法…...

使用 XRDP 远程linux主机
一、简介 XRDP是一个开源的远程桌面协议(Remote Desktop Protocol,RDP)服务器,采用的是标准的RDP。 官网地址:https://www.xrdp.org/ github地址: https://github.com/neutrinolabs/xrdp/releases XRDP也是C/S架构&…...

学习小型gpt源码(自用)
数据集构建_哔哩哔哩_bilibili (b站上有一系列课,从数据处理到模型构建和训练使用) 什么是batch? 为什么一个batch内的句子要一样长? 不同batch的长度可以不一样,但是同一个batch内长度一样!…...
@Transactional使用的注意事项
在项目中涉及到CRUD操作时,一般都会在方法上添加该注解,以为加上Transactional,Spring就可以自动帮我们进行事务的开启、提交 有一个很多人都会犯的误区: 将Spring事务与Transactional划上了等号,只要有数据库相关操作…...

快手可灵视频生成大模型全方位测评
快手视频生成大模型“可灵”(Kling),是全球首个真正用户可用的视频生成大模型,自面世以来,凭借其无与伦比的视频生成效果,在全球范围内赢得了用户的热烈追捧与高度评价。截至目前,申请体验其内测…...

【JavaScript】`Map` 数据结构
文章目录 一、Map 的基本概念二、常见操作三、与对象的对比四、实际应用场景 在现代 JavaScript 中,Map 是一种非常重要且强大的数据结构。与传统的对象(Object)不同,Map 允许您使用各种类型的值作为键,不限于字符串或…...
Ubuntu22.04使用NVM安装多版本Node.js和版本切换
Fabric官方目前支持Node.js开发区块链应用,建议使用Node长期支持版本(LTS)。 建议使用NVM安装Node.js,NVM可以帮助我们方便的在Node的不同版本之间进行切换,这样我们就可以同时工作在不同的项目上。 下面是安装的脚本…...

基于C51和OLED12864实现Goole小恐龙
在数字娱乐领域,Google小恐龙(T-Rex Runner)以其简单而上瘾的游戏机制赢得了广泛的关注和喜爱。这款内置于Chrome浏览器的离线小游戏,不仅为用户带来了乐趣,也激发了开发者们对其进行各种创新和扩展的灵感。本文将介绍…...

【Docker】CentOS7环境下的安装
环境展示 安装 配置仓库 sudo yum install -y yum-utils # docker官方key文件下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 建议使用阿里云key文件下载 sudo yum-config-manager --add-repo https://mirrors.aliyun.…...

浏览器的最大并发数(http1.1)
HTTP/1.1:每个资源请求通常需要单独的TCP连接,尽管支持Keep-Alive机制,允许在同一个TCP连接上连续发送多个请求。但通常浏览器限制并发TCP连接数(例如,每个域名最多6个并发连接)。 HTTP/2:引入…...
Android 开发中px、dpi 和 dp三个单位的介绍
Android 开发中px、dpi 和 dp三个单位的介绍 在 Android 开发中,px、dpi 和 dp 是用来描述屏幕尺寸和密度的单位,它们在设计和开发中有着不同的作用和用途。 1. px(像素) 定义: px 表示屏幕上的一个像素点,…...

zookeeper开启SASL权限认证
目录 一、SASL介绍 二、使用 SASL 进行身份验证 2.1 服务器到服务器的身份验证 2.2 客户端到服务器身份验证 三、验证功能 一、SASL介绍 默认情况下,ZooKeeper 不使用任何形式的身份验证并允许匿名连接。但是,它支持 Java 身份验证与授权服务(JAAS)…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...