GNN环境安装

news2025/1/17 14:03:43

参考:

  • torch_geometric踩坑实战–安装与运行 亲测有效!! https://blog.csdn.net/m0_55245520/article/details/130424828
  • pytorch 查看gpu cuda版本 https://blog.csdn.net/jacke121/article/details/93592487

x.1 安装

x.1.1 镜像信息补充

参考 https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ%3D%3D&idx=1&mid=2247491983&scene=21&sn=2052e7a038f2db52eb282b88495a7dfd#wechat_redirect

请添加图片描述

请添加图片描述
请添加图片描述

请添加图片描述

x.1.2 conda环境安装

使用anaconda的environment.yml安装环境,将conda镜像改为上一步中的conda镜像,即将channels中的文件改变。这一步时间会比较长,主要使用conda install进行安装,要耐心等待

conda env create -f environment.yml
conda activate env_cp39_GCN

yml文件如下,

name: env_cp39_GCN
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - pytorch
  - dglteam
  - conda-forge
  - defaults
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=1_gnu
  - argon2-cffi=21.3.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=21.2.0=py39hb9d737c_2
  - asttokens=2.0.5=pyhd8ed1ab_0
  - attrs=21.4.0=pyhd8ed1ab_0
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - beautifulsoup4=4.11.1=pyha770c72_0
  - blas=1.0=mkl
  - bleach=5.0.0=pyhd8ed1ab_0
  - boost=1.74.0=py39h5472131_5
  - boost-cpp=1.74.0=hc6e9bd1_3
  - bottleneck=1.3.4=py39hce1f21e_0
  - brotli=1.0.9=h166bdaf_7
  - brotli-bin=1.0.9=h166bdaf_7
  - brotlipy=0.7.0=py39h27cfd23_1003
  - bzip2=1.0.8=h7b6447c_0
  - ca-certificates=2022.6.15=ha878542_0
  - cairo=1.16.0=h6cf1ce9_1008
  - certifi=2022.6.15=py39hf3d152e_0
  - cffi=1.15.0=py39hd667e15_1
  - charset-normalizer=2.0.4=pyhd3eb1b0_0
  - click=8.0.4=py39h06a4308_0
  - colorama=0.4.4=pyhd3eb1b0_0
  - cryptography=36.0.0=py39h9ce1e76_0
  - cudatoolkit=10.2.89=hfd86e86_1
  - cycler=0.11.0=pyhd8ed1ab_0
  - debugpy=1.6.0=py39h5a03fae_0
  - decorator=5.1.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - dgl=0.8.1=py39_0
  - dgl-cuda10.2=0.8.1=py39_0
  - entrypoints=0.4=pyhd8ed1ab_0
  - executing=0.8.3=pyhd8ed1ab_0
  - ffmpeg=4.3=hf484d3e_0
  - flit-core=3.7.1=pyhd8ed1ab_0
  - fontconfig=2.13.1=h6c09931_0
  - fonttools=4.32.0=py39hb9d737c_0
  - freetype=2.11.0=h70c0345_0
  - fuzzywuzzy=0.18.0=pyhd8ed1ab_0
  - gettext=0.19.8.1=h73d1719_1008
  - giflib=5.2.1=h7b6447c_0
  - gmp=6.2.1=h2531618_2
  - gnutls=3.6.15=he1e5248_0
  - greenlet=1.1.2=py39h5a03fae_2
  - icu=68.2=h9c3ff4c_0
  - idna=3.3=pyhd3eb1b0_0
  - imbalanced-learn=0.9.1=pyhd8ed1ab_1
  - importlib-metadata=4.11.3=py39hf3d152e_1
  - importlib_resources=5.7.0=pyhd8ed1ab_0
  - intel-openmp=2021.4.0=h06a4308_3561
  - ipykernel=6.13.0=py39hef51801_0
  - ipython=8.2.0=py39hf3d152e_0
  - ipython_genutils=0.2.0=py_1
  - jedi=0.18.1=py39hf3d152e_1
  - jinja2=3.1.1=pyhd8ed1ab_0
  - joblib=1.1.0=pyhd8ed1ab_0
  - jpeg=9d=h7f8727e_0
  - jsonschema=4.4.0=pyhd8ed1ab_0
  - jupyter_client=7.2.2=pyhd8ed1ab_1
  - jupyter_core=4.9.2=py39hf3d152e_0
  - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
  - kiwisolver=1.4.2=py39hf939315_1
  - lame=3.100=h7b6447c_0
  - lcms2=2.12=h3be6417_0
  - ld_impl_linux-64=2.36.1=hea4e1c9_2
  - libbrotlicommon=1.0.9=h166bdaf_7
  - libbrotlidec=1.0.9=h166bdaf_7
  - libbrotlienc=1.0.9=h166bdaf_7
  - libffi=3.4.2=h7f98852_5
  - libgcc-ng=11.2.0=h1d223b6_15
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libglib=2.68.4=h174f98d_1
  - libgomp=11.2.0=h1d223b6_15
  - libiconv=1.16=h516909a_0
  - libidn2=2.3.2=h7f8727e_0
  - libpng=1.6.37=hbc83047_0
  - libprotobuf=3.18.0=h780b84a_1
  - libsodium=1.0.18=h36c2ea0_1
  - libstdcxx-ng=11.2.0=he4da1e4_15
  - libtasn1=4.16.0=h27cfd23_0
  - libtiff=4.2.0=h85742a9_0
  - libunistring=0.9.10=h27cfd23_0
  - libuuid=1.0.3=h7f8727e_2
  - libuv=1.40.0=h7b6447c_0
  - libwebp=1.2.2=h55f646e_0
  - libwebp-base=1.2.2=h7f8727e_0
  - libxcb=1.13=h7f98852_1004
  - libxml2=2.9.12=h72842e0_0
  - littleutils=0.2.2=py_0
  - lz4-c=1.9.3=h295c915_1
  - markupsafe=2.1.1=py39hb9d737c_1
  - matplotlib-base=3.5.1=py39h2fa2bec_0
  - matplotlib-inline=0.1.3=pyhd8ed1ab_0
  - mistune=0.8.4=py39h3811e60_1005
  - mkl=2021.4.0=h06a4308_640
  - mkl-service=2.4.0=py39h7f8727e_0
  - mkl_fft=1.3.1=py39hd3c417c_0
  - mkl_random=1.2.2=py39h51133e4_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - nbclient=0.6.0=pyhd8ed1ab_0
  - nbconvert=6.5.0=pyhd8ed1ab_0
  - nbconvert-core=6.5.0=pyhd8ed1ab_0
  - nbconvert-pandoc=6.5.0=pyhd8ed1ab_0
  - nbformat=5.3.0=pyhd8ed1ab_0
  - ncurses=6.3=h7f8727e_2
  - nest-asyncio=1.5.5=pyhd8ed1ab_0
  - nettle=3.7.3=hbbd107a_1
  - networkx=2.7.1=pyhd3eb1b0_0
  - notebook=6.4.10=pyha770c72_0
  - numexpr=2.8.1=py39h6abb31d_0
  - numpy=1.21.5=py39he7a7128_1
  - numpy-base=1.21.5=py39hf524024_1
  - ogb=1.3.3=pyhd8ed1ab_0
  - openh264=2.1.1=h4ff587b_0
  - openssl=3.0.3=h166bdaf_0
  - outdated=0.2.1=pyhd8ed1ab_0
  - packaging=21.3=pyhd3eb1b0_0
  - pandas=1.4.1=py39h295c915_1
  - pandoc=2.18=ha770c72_0
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - parso=0.8.3=pyhd8ed1ab_0
  - pcre=8.45=h9c3ff4c_0
  - pexpect=4.8.0=pyh9f0ad1d_2
  - pickleshare=0.7.5=py_1003
  - pillow=9.0.1=py39h22f2fdc_0
  - pip=21.2.4=py39h06a4308_0
  - pixman=0.40.0=h36c2ea0_0
  - prometheus_client=0.14.1=pyhd8ed1ab_0
  - prompt-toolkit=3.0.29=pyha770c72_0
  - protobuf=3.18.0=py39he80948d_0
  - psutil=5.9.0=py39hb9d737c_1
  - pthread-stubs=0.4=h36c2ea0_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - pure_eval=0.2.2=pyhd8ed1ab_0
  - pycairo=1.21.0=py39h0934665_1
  - pycparser=2.21=pyhd3eb1b0_0
  - pygments=2.11.2=pyhd8ed1ab_0
  - pyopenssl=22.0.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pyrsistent=0.18.1=py39hb9d737c_1
  - pysocks=1.7.1=py39h06a4308_0
  - python=3.9.7=hf930737_3_cpython
  - python-dateutil=2.8.2=pyhd3eb1b0_0
  - python-fastjsonschema=2.15.3=pyhd8ed1ab_0
  - python-levenshtein=0.12.2=py39hb9d737c_2
  - python_abi=3.9=2_cp39
  - pytorch=1.11.0=py3.9_cuda10.2_cudnn7.6.5_0
  - pytorch-mutex=1.0=cuda
  - pytz=2021.3=pyhd3eb1b0_0
  - pyzmq=22.3.0=py39headdf64_2
  - readline=8.1.2=h7f8727e_1
  - reportlab=3.5.68=py39he59360d_1
  - requests=2.27.1=pyhd3eb1b0_0
  - scipy=1.6.2=py39had2a1c9_1
  - send2trash=1.8.0=pyhd8ed1ab_0
  - setuptools=61.2.0=py39h06a4308_0
  - six=1.16.0=pyhd3eb1b0_1
  - soupsieve=2.3.1=pyhd8ed1ab_0
  - sqlalchemy=1.4.35=py39hb9d737c_0
  - sqlite=3.38.2=hc218d9a_0
  - stack_data=0.2.0=pyhd8ed1ab_0
  - tensorboardx=2.5=pyhd8ed1ab_0
  - terminado=0.13.3=py39hf3d152e_1
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tinycss2=1.1.1=pyhd8ed1ab_0
  - tk=8.6.11=h1ccaba5_0
  - torchaudio=0.11.0=py39_cu102
  - torchvision=0.12.0=py39_cu102
  - tornado=6.1=py39hb9d737c_3
  - tqdm=4.63.0=pyhd3eb1b0_0
  - traitlets=5.1.1=pyhd8ed1ab_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - tzdata=2022a=hda174b7_0
  - unicodedata2=14.0.0=py39hb9d737c_1
  - urllib3=1.26.8=pyhd3eb1b0_0
  - wcwidth=0.2.5=pyh9f0ad1d_2
  - webencodings=0.5.1=py_1
  - wheel=0.37.1=pyhd3eb1b0_0
  - xorg-kbproto=1.0.7=h7f98852_1002
  - xorg-libice=1.0.10=h7f98852_0
  - xorg-libsm=1.2.2=h470a237_5
  - xorg-libx11=1.7.2=h7f98852_0
  - xorg-libxau=1.0.9=h7f98852_0
  - xorg-libxdmcp=1.1.3=h7f98852_0
  - xorg-libxext=1.3.4=h7f98852_1
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-xextproto=7.3.0=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xz=5.2.5=h7b6447c_0
  - zeromq=4.3.4=h9c3ff4c_1
  - zipp=3.8.0=pyhd8ed1ab_0
  - zlib=1.2.11=h7f8727e_4
  - zstd=1.4.9=haebb681_0

x.1.3 pip 安装

由于pip的“特殊性和极为特殊的依赖性”,往往并不能一次性安装好,使用pip循环遍历多次安装:即依次安装不好,将安装失败的注释掉,接着安装剩下的。一遍循环完毕后,将安装好的注释掉,将上一次安装失败的解注释,继续安装。循环往复,直到安装好。

pip install -r requirements.txt
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

requirements.txt如下,

absl-py==1.0.0
antlr4-python3-runtime==4.9.3
astor==0.7.1
autograd==1.4
autograd-gamma==0.5.0
ax-platform==0.2.5.1
botorch==0.6.4
cachetools==5.0.0
captum==0.0.1
cilog==1.2.3
cloudpickle==2.0.0
dgllife==0.2.9
dive-into-graphs==0.2.0

torch-scatter==2.0.9
torch-sparse==0.6.13
torch-cluster==1.6.0
torch-spline_conv==1.2.1
torch-geometric==2.0.4

x.2 碰到问题

Traceback (most recent call last):
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/root/.vscode-server/extensions/ms-python.python-2022.6.0/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
    cli.main()
  File "/root/.vscode-server/extensions/ms-python.python-2022.6.0/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 444, in main
    run()
  File "/root/.vscode-server/extensions/ms-python.python-2022.6.0/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/runpy.py", line 268, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/yingmuzhi/high_ppi/HIGH-PPI/model_train.py", line 317, in <module>
    main()
  File "/home/yingmuzhi/high_ppi/HIGH-PPI/model_train.py", line 308, in main
    train(batch, p_x_all, p_edge_all, model, graph, ppi_list, loss_fn, optimizer, device,
  File "/home/yingmuzhi/high_ppi/HIGH-PPI/model_train.py", line 135, in train
    output = model(batch, p_x_all, p_edge_all, graph.edge_index_got, train_edge_id)
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1110, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/yingmuzhi/high_ppi/HIGH-PPI/gnn_models_sag.py", line 170, in forward
    embs = self.BGNN(x, edge, batch-1)
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1110, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/yingmuzhi/high_ppi/HIGH-PPI/gnn_models_sag.py", line 117, in forward
    x = self.conv1(x, edge_index)
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1110, in _call_impl
    return forward_call(*input, **kwargs)
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch_geometric/nn/conv/gcn_conv.py", line 210, in forward
    edge_index, edge_weight = gcn_norm(  # yapf: disable
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch_geometric/nn/conv/gcn_conv.py", line 66, in gcn_norm
    if is_torch_sparse_tensor(edge_index):
  File "/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch_geometric/utils/sparse.py", line 68, in is_torch_sparse_tensor
    if src.layout == torch.sparse_csc:
AttributeError: module 'torch' has no attribute 'sparse_csc'

cuda error

train gnn, train_num: 5328, valid_num: 1332
cuda:0
/opt/conda/envs/HIGH-PPI/lib/python3.9/site-packages/torch/cuda/__init__.py:145: UserWarning: 
NVIDIA A40 with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.
If you want to use the NVIDIA A40 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

  warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))

使用查看cuda版本

import torch

print(torch.version.cuda)

动手深度学习纸质书: https://j.youzan.com/2E82KT(半价购书)

torch_geometric error

请添加图片描述

安装torch和对应cudatoolkit。

x.2.1 anaconda(可选)

使用python3.9

conda create -n env_cp39_GNN python=3.9

x.2.2 torch

参考 https://pytorch.org/get-started/previous-versions/

使用torch1.11和cuda10.2。需要注意的是1.11后的使用+指定tookkit,如torch==1.12.0+cu102; 2.0以后的使用-指定toolkit,如pytorch==2.0.0 pytorch-cuda=11.7

# CUDA 10.2
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=10.2 -c pytorch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】594. 最长和谐子序列

594. 最长和谐子序列&#xff08;简单&#xff09; 方法&#xff1a;哈希表计数 思路 题目规定的「和谐子序列」中的最值差值正好为 1&#xff0c;因而子序列排序后必然符合[a,a,.., a 1,a1]形式&#xff0c;即符合条件的和谐子序列长度为相邻两数(差值为 1)的出现次数之和。…

element中icon字体图标的使用

效果图 官方提供的图标 icon字体图标 安装 安装依赖 cnpm install element-plus/icons-vue 编写src/plugins/icons.js import * as components from "element-plus/icons-vue";export default {install: (app) > {for (const key in components) {const comp…

c++智能指针简单示例

代码 #include<iostream> using namespace std; #include<memory> // 头文件class TestClass { private:int Value;public:TestClass(int value) :Value(value) {cout << "构造函数调用" << endl;}~TestClass() {cout << "析构函…

如何有效阅读文献

作为研究生要保持看文献的能力&#xff0c;以《面向大规模图像定位的高效优先匹配&#xff08;Efficient & Effective Prioritized Matching for Large-Scale Image-Based Localization&#xff09;》文献为例&#xff0c;本文记录了自己在学习过程中如何阅读文献技巧。 文…

第八节 学生管理系统 (阶段案例)

学生管理系统 1.1 设计背景 管理系统&#xff0c;主要任务就是使用计算机对学生的各种信息进行日常管理&#xff0c;如&#xff1a; 添加删除修改查询退出系统 程序设计思路 1.2 需求设计分析 打印 “学生管理系统” 的功能菜单,提示用户选择功能序号; print_menu() 打印函…

WebSocket协议基础

文章目录 什么是websocketwebsocet 特点 一、websocket 建立连接流程二、websocket 握手流程客户端握手包2.服务端握手包 三、websocket数据总结参考 什么是websocket WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似&#xff0c;但是却区别于http的一种新的协议。…

AD Class 、设计参数、规则的创建

设计 生产 线宽 间距 过孔 根据生产的要求进行桥接 Class 电源走线 和 信号走线 设计—》类里有 将所有的电源都添加进电源类里 新建的类别可以在Panls的PCB中看到 并且可以在这里面改变线的颜色 区分电源 对于走线的宽度,电源主要是用来载流的&#xff0c;信号主要是用来做信…

彻底理解Handler的设计之传送带模型

作者&#xff1a;彭泰强 0 这篇文章的目的 有时候在Handler相关的文章中可以看到&#xff0c;会把Handler机制的几个角色类比成一个传送带场景来理解。 例如&#xff0c;这篇文章中写到&#xff1a; 我们可以把传送带上的货物看做是一个个的Message&#xff0c;而承载这些货物…

6.2.8 网络基本服务----万维网(www)

6.2.8 网络基本服务----万维网&#xff08;www&#xff09; 万维网即www&#xff08;World Wide Web&#xff09;是开源的信息空间&#xff0c;使用URL也就是统一资源标识符标识文档和Web资源&#xff0c;使用超文本链接互相连接资源&#xff0c;万维网并非某种特殊的计算机网…

力扣 198.打家劫舍【中等】

198.打家劫舍 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/house-robber 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃…

【Vue3】初始化和Composition API(组合式)

Vue3 创建Vue3.0工程查看自己的vue/cli版本&#xff0c;使用Vue/cli创建使用vite创建 查看Vue3.0工程vue.config.js中&#xff0c;关闭语法检查&#xff0c;main.js讲解app.vue讲解 常用的Composition API&#xff08;组合式&#xff09;1.拉开序幕的setup返回对象返回渲染函数…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题&#xff0c;全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测 目录 时序预测 | MATLAB实现Hamilton滤波AR时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 预测在很大程度上取决于适合周期的模型和所采用的预测方法,就像它们依赖于过滤器提取的周期一样。标准 Hodrick-P…

Top-down方法学

Top-down方法学由Intel提出&#xff0c;是一种软件性能分析技术。 x86处理器的PMU一般提供8个PMC&#xff0c;其中4个是固定的PMC&#xff0c;其对应的监控信号是不能配置的。另外4个PMC监控的信号是可以配置的。 Top-down方法学的动机 通过PMC&#xff0c;软件工程师可以获…

【观察】超融合+软件定义,构建双活数据中心“新范式”

随着数字化转型的加速&#xff0c;企业的业务经营活动越来越多依赖于数据中心等基础设施&#xff0c;“全天候”业务连续性运营也正成为大中型企业追求的目标&#xff0c;如何实现减少甚至消除正常和非正常的停机对业务可用性造成的影响&#xff0c;不但是企业IT建设与运维团队…

Spring - 更简单的获取 Bean 对象

目录 二、获取 Bean 对象&#xff08;对象装配或者对象注入&#xff09; 1. 属性注入 1.1 属性注入的优点和缺点&#xff1a; 2. Setter注入 2.1 Setter注入的优点和缺点 3. 构造方法注入&#xff08;spring 官方推荐的对象注入方式&#xff09; 3.1 构造方法的优点和缺点…

【PHP面试题47】Redis的持久化有哪几种?有什么区别?谈谈你的理解

文章目录 一、前言二、RDB&#xff08;Redis数据库&#xff09;持久化方式2.1 触发条件2.2 RDB文件的格式2.3 RDB持久化原理2.4 RDB方式的优缺点 三、AOF&#xff08;Append Only File&#xff09;持久化方式3.1 触发条件3.2 AOF文件的格式3.3 AOF持久化原理3.4 AOF方式的优缺点…

cmake项目相关的变量

cmake项目相关的变量 在cmake项目中&#xff0c;通常需要对路径进行操作&#xff0c;比如我们需要知道源码的顶级目录&#xff0c;源码的构建目录和某个project名字相关的一些目录等。 CMAKE_SOURCE_DIR&#xff0c;这个变量的值代表的是源码的顶级目录。但是这个变量的值可能…

Python(十一)变量多次赋值

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【hadoop】部署hadoop的本地模式

hadoop的本地模式 本地模式的特点部署本地模式测试本地模式是否部署完成 本地模式的特点 没有HDFS、也没有Yarn只能测试MapReduce程序&#xff0c;作为一个普通的Java程序处理的数据是本地Linux的文件一般用于开发和测试 部署本地模式 进入该路径 /root/training/hadoop-2.7…