PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/132334671

Img

Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization

  • OpenFold: 重新训练 AlphaFold2 揭示对于学习机制和泛化能力的新见解

OpenFold 是可训练的开源实现用于模拟 AlphaFold2 的结构预测能力,主要特点如下:

  • 训练和性能:从头开始训练 OpenFold,并且达到与 AlphaFold2 相当的预测精度。同时 OpenFold 比 AlphaFold2 更快、更节省内存,支持在 PyTorch 框架下运行。
  • 学习机制:通过分析 OpenFold 在训练过程中预测的结构,发现一些有趣的现象,例如空间维度、二级结构元素和三级尺度的分阶段学习,以及低维 PCA 投影的近似性。
  • 泛化能力:通过使用不同大小和多样性的训练集,以及在结构分类上剔除部分训练数据,来评估 OpenFold 对于未见蛋白质折叠空间的泛化能力。发现 OpenFold 即使在极端缩减的训练集上,也能表现出惊人的鲁棒性和准确性。

GitHub: aqlaboratory/openfold


1. 结构推理

准备模型文件 finetuning_ptm_2.pt ,参考 Huggingface - OpenFold:

pip install bypy
bypy infomkdir openfold_params
cd openfold_params/
bypy downfile /huggingface/openfold/finetuning_ptm_2.pt finetuning_ptm_2.pt

测试的推理命令,如下:

python3 run_pretrained_openfold.py \
mydata/test \
af2-data-v230/pdb_mmcif/mmcif_files \
--uniref90_database_path af2-data-v230/uniref90/uniref90.fasta \
--mgnify_database_path af2-data-v230/mgnify/mgy_clusters_2022_05.fa \
--pdb70_database_path af2-data-v230/pdb70/pdb70 \
--uniclust30_database_path msa_databases/deepmsa2/uniclust30/uniclust30_2018_08 \
--output_dir mydata/output \
--bfd_database_path af2-data-v230/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--model_device "cuda:0" \
--jackhmmer_binary_path /opt/openfold/hhsuite-speed/jackhmmer \
--hhblits_binary_path /opt/conda/envs/openfold/bin/hhblits \
--hhsearch_binary_path /opt/conda/envs/openfold/bin/hhsearch \
--kalign_binary_path /opt/conda/envs/openfold/bin/kalign \
--config_preset "model_1_ptm" \
--openfold_checkpoint_path openfold/resources/openfold_params/finetuning_ptm_2.pt

运行日志,如下:

INFO:openfold/openfold/utils/script_utils.py:Loaded OpenFold parameters at openfold/resources/openfold_params/finetuning_ptm_2.pt...
INFO:openfold/run_pretrained_openfold.py:Generating alignments for A...
INFO:openfold/openfold/utils/script_utils.py:Running inference for A...
INFO:openfold/openfold/utils/script_utils.py:Inference time: 10.128928968682885
INFO:openfold/run_pretrained_openfold.py:Output written to mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:openfold/run_pretrained_openfold.py:Running relaxation on mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:openfold/openfold/utils/script_utils.py:Relaxation time: 11.812019010074437
INFO:openfold/openfold/utils/script_utils.py:Relaxed output written to mydata/output/predictions/A_model_1_ptm_relaxed.pdb...

替换高性能的 Jackhmmer,位置如下:

cp backup/hhsuite-speed-3.3.2/jackhmmer /opt/openfold/hhsuite-speed/jackhmmer

模型推理的输出,如下:

alignments/  		# MSA文件,与 AF2 相同
predictions/		# 预测结果
timings.json		# 时间
tmp_2711.fasta	# 缓存fasta

其中,在 timings.json中,缓存推理耗时,即:

{"inference": 12.08716268837452}

其中,在 alignments/A 文件夹中,包括 MSA 文件,序列数量如下:

mgnify_hits.a3m			# 56 行
pdb70_hits.hhr			# 159 行
uniref90_hits.a3m		# 58 行
bfd_uniref_hits.a3m

注意:与 AF2 不同的是,OpenFold 是 a3m 格式,而 AF2 是 sto 格式。

其中,在 predictions 文件夹中,默认只包括 1 个预测的结构,以及 Relax 的结构,如下:

A_model_1_ptm_relaxed.pdb
A_model_1_ptm_unrelaxed.pdb
timings.json

预测结果如下,其中黄色是 Reference 结构,深蓝色是 AF2 的单模型预测结果,浅蓝色是 OpenFold 的 finetuning_ptm_2.pt 模型预测结果

  • AF2:{'TMScore': 0.9036, 'RMSD(local)': 1.66, 'Align.Len.': 117, 'DockQ': 0.0}
  • OpenFold:{'TMScore': 0.8601, 'RMSD(local)': 1.7, 'Align.Len.': 115, 'DockQ': 0.0}

即:
Img


2. 环境配置

构建 base docker 环境,基于 AF2 的 docker,即:

nvidia-docker run -it --name openfold-[your name] -v [nfs path]:[nfs path] af2:v1.02

2.1 配置 conda 与 pip 高速环境

在安装环境时,建议使用国内的 conda 与 pip 源,可以加速下载。

进入 docker 之后,首先修改 conda 与 pip 的环境配置。创建或修改 ~/.condarc,即:

vim ~/.condarc# 添加如下信息channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
channel_priority: disabled
allow_conda_downgrades: true

在 docker 中,存在默认的 pip 环境,而且优先级较高,即删除 pip 配置,再修改 pip 配置,避免失效或冲突,即:

rm /opt/conda/pip.conf
rm /root/.config/pip/pip.conf

再修改配置 ~/.pip/pip.conf,建议使用 阿里云 的 pip 源,清华源缺少部分安装包,即:

vim ~/.pip/pip.conf# 添加如下信息# This file has been autogenerated or modified by NVIDIA PyIndex.
# In case you need to modify your PIP configuration, please be aware that
# some configuration files may have a priority order. Here are the following 
# files that may exists in your machine by order of priority:
#
# [Priority 1] Site level configuration files
#       1. `/opt/conda/pip.conf`
#
# [Priority 2] User level configuration files
#       1. `/root/.config/pip/pip.conf`
#       2. `/root/.pip/pip.conf`
#
# [Priority 3] Global level configuration files
#       1. `/etc/pip.conf`
#       2. `/etc/xdg/pip/pip.conf`[global]
no-cache-dir = true
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url = https://pypi.ngc.nvidia.com
trusted-host = mirrors.aliyun.com pypi.ngc.nvidia.com

2.2 配置 Docker 环境

建议 不要 使用默认命令配置 docker 镜像,即 docker build -t openfold .,原因是下载速度较慢,而且有部分冲突,可以参考 Dockerfile 。

手动配置如下,配置 OpenFold 系统环境,即:

# 添加 apt 源
apt-key del 7fa2af80
apt-key del 3bf863cc
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub# 安装源
apt-get update && apt-get install -y wget libxml2 cuda-minimal-build-11-3 libcusparse-dev-11-3 libcublas-dev-11-3 libcusolver-dev-11-3 git

注意:如果网速很慢,wget 需要耐心等待,建议重试几次。

配置 OpenFold 的 conda 环境 openfold,即:

# 复制环境文件
cd openfold# 安装环境文件
conda env update -n openfold --file environment.yml && conda clean --all

如果中断,也可以重新更新,即:

# 更新安装环境文件
conda activate openfold
conda env update --file /opt/openfold/environment.yml --prune

注意:需要时间较长,请耐心等待,当安装 pip 包出现异常时,建议手动安装。

遇到安装失败,建议手动安装,日志清晰,推荐 安装方式,即:

# 创建环境
conda create -n openfold python=3.9# 安装 conda 包
conda install -y -c conda-forge python=3.9 setuptools=59.5.0 pip openmm=7.5.1 pdbfixer cudatoolkit==11.3.*
conda install -y -c bioconda hmmer==3.3.2 hhsuite==3.3.0 kalign2==2.04
conda install -y -c pytorch pytorch=1.12.*# 安装 pip 包
pip install 'dllogger @ git+https://github.com/NVIDIA/dllogger.git'
pip install biopython==1.79 deepspeed==0.5.10 dm-tree==0.1.6 ml-collections==0.1.0 numpy==1.21.2 PyYAML==5.4.1 requests==2.26.0 scipy==1.7.1 tqdm==4.62.2 typing-extensions==3.10.0.2 pytorch_lightning==1.5.10 wandb==0.12.21 modelcif==0.7# 解决 bug
conda install -c anaconda numpy-base==1.22.3  # 解决 np.object bug,同时避免与 scipy 冲突。

注意: openmm 的 7.5.1 版本,位于 simtk 中,即 from simtk.openmm import app,在 sites-package 中,没有独立的文件夹。

2.3 修复文件与编译工程

下载资源 stereo_chemical_props.txt 与修复文件 simtk.openmm,即:

cd openfold 
# 注意位于 openfold/openfold/resources 中
# wget -q -P openfold/resources https://git.scicore.unibas.ch/schwede/openstructure/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt
cd openfold/resources
wget https://git.scicore.unibas.ch/schwede/openstructure/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt --no-check-certificate# 注意 simtk.openmm 的安装位置需要选择
# conda show openmm
# import simtk
# print(simtk.__file__)
# /opt/conda/envs/openfold/lib/python3.9/site-packages/
patch -p0 -d /opt/conda/envs/openfold/lib/python3.9/site-packages/ < lib/openmm.patch# 输出日志
patching file simtk/openmm/app/topology.py
Hunk #1 succeeded at 353 (offset -3 lines).

注意:openmm 的 7.5.1 版本需要修复一些 bug,高版本不需要,参考 关于 AlphaFold2 的 openmm.patch 补丁

编译工程,即 conda 环境中包括 openfold 的包,即

cd openfold
python3 setup.py install

2.4 相关文件

配置 conda 环境需要参考 environment.yml 文件,即:

name: openfold_venv
channels:- conda-forge- bioconda- pytorch
dependencies:- conda-forge::python=3.9- conda-forge::setuptools=59.5.0- conda-forge::pip- conda-forge::openmm=7.5.1- conda-forge::pdbfixer- conda-forge::cudatoolkit==11.3.*- bioconda::hmmer==3.3.2- bioconda::hhsuite==3.3.0- bioconda::kalign2==2.04- pytorch::pytorch=1.12.*- pip:- biopython==1.79- deepspeed==0.5.10- dm-tree==0.1.6- ml-collections==0.1.0- numpy==1.21.2- PyYAML==5.4.1- requests==2.26.0- scipy==1.7.1- tqdm==4.62.2- typing-extensions==3.10.0.2- pytorch_lightning==1.5.10- wandb==0.12.21- modelcif==0.7- git+https://github.com/NVIDIA/dllogger.git

配置环境需要参考 Dockerfile 文件,即:

FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu18.04# metainformation
LABEL org.opencontainers.image.version = "1.0.0"
LABEL org.opencontainers.image.authors = "Gustaf Ahdritz"
LABEL org.opencontainers.image.source = "https://github.com/aqlaboratory/openfold"
LABEL org.opencontainers.image.licenses = "Apache License 2.0"
LABEL org.opencontainers.image.base.name="docker.io/nvidia/cuda:10.2-cudnn8-runtime-ubuntu18.04"RUN apt-key del 7fa2af80
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pubRUN apt-get update && apt-get install -y wget libxml2 cuda-minimal-build-11-3 libcusparse-dev-11-3 libcublas-dev-11-3 libcusolver-dev-11-3 git
RUN wget -P /tmp \"https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" \&& bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \&& rm /tmp/Miniconda3-latest-Linux-x86_64.sh
ENV PATH /opt/conda/bin:$PATHCOPY environment.yml /opt/openfold/environment.yml# installing into the base environment since the docker container wont do anything other than run openfold
RUN conda env update -n base --file /opt/openfold/environment.yml && conda clean --allCOPY openfold /opt/openfold/openfold
COPY scripts /opt/openfold/scripts
COPY run_pretrained_openfold.py /opt/openfold/run_pretrained_openfold.py
COPY train_openfold.py /opt/openfold/train_openfold.py
COPY setup.py /opt/openfold/setup.py
COPY lib/openmm.patch /opt/openfold/lib/openmm.patch
RUN wget -q -P /opt/openfold/openfold/resources \https://git.scicore.unibas.ch/schwede/openstructure/-/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt
RUN patch -p0 -d /opt/conda/lib/python3.9/site-packages/ < /opt/openfold/lib/openmm.patch
WORKDIR /opt/openfold
RUN python3 setup.py install

2.5 提交 Docker Image

登录 docker 服务器,即:

docker login harbor.[ip address].com

注意:如果无法登录,则需要管理员配置,或切换可登录的服务器。

设置 BOS 命令:

alias bos='bcecmd/bcecmd --conf-path bcecmd/bceconf/ bos'

提交 docker image,设置标签 (tag),以及上传 docker,即:

# 提交 Tag
docker ps -l
docker commit [container id] openfold:v1.0# 准备远程 Tag
docker tag openfold:v1.0 openfold:v1.0
docker images | grep "openfold"# 推送至远程
docker push openfold:v1.0
# 从远程拉取
docker pull openfold:v1.0# 或者保存至本地
docker save openfold:v1.0 | gzip > openfold_v1_0.tar.gz
# 加载已保存的 docker image
docker image load -i openfold_v1_01.tar.gz
docker images | grep "openfold"

进入 Harbor 页面查看,发现已上传的 docker image,以及不同版本,即:

Img


3. Bugfix

3.1 Numpy 版本不兼容

Bug 日志:

openfold/openfold/data/templates.py:88: FutureWarning: In the future `np.object` will be defined as the corresponding NumPy scalar."template_domain_names": np.object,
Traceback (most recent call last):File "openfold/run_pretrained_openfold.py", line 47, in <module>from openfold.data import templates, feature_pipeline, data_pipelineFile "openfold/openfold/data/templates.py", line 88, in <module>"template_domain_names": np.object,File "/opt/conda/envs/openfold/lib/python3.9/site-packages/numpy/__init__.py", line 319, in __getattr__raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'object'.
`np.object` was a deprecated alias for the builtin `object`. To avoid this error in existing code, use `object` by itself. Doing this will not modify any behavior and is safe. 
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

即 Numpy 版本过高,没有 np.object 属性,建议降低至 1.23.4 版本,即:

conda list numpy# 当前 numpy-base 的版本是 1.25.2
# conda list numpy
# packages in environment at /opt/conda/envs/openfold:
#
# Name                    Version                   Build  Channel
numpy                     1.21.2                   pypi_0    pypi
numpy-base                1.25.2           py39hb5e798b_0    defaults# 降低版本至 1.23.4
conda install -c anaconda numpy-base==1.22.3  # 解决 np.object bug,同时避免与 scipy 冲突。

也可以,修改源码文件 openfold/data/templates.pyopenfold/data/data_pipeline.py,将 np.object 替换为 object,注意,全局搜索,需要修改 2 处,即:

TEMPLATE_FEATURES = {"template_aatype": np.int64,"template_all_atom_mask": np.float32,"template_all_atom_positions": np.float32,"template_domain_names": np.object,  # 需要修改"template_sequence": np.object,  # 需要修改"template_sum_probs": np.float32,
}

Bug 参考:

  • StackOverflow - module ‘numpy’ has no attribute ‘object’ closed
  • 关于 scipy 与 numpy 的兼容性,参考: Toolchain Roadmap

参考

参考:

  • ENV 设置环境变量
  • StackOverflow - How to update an existing Conda environment with a .yml file
  • CSDN - 配置 AlphaFold2 的高效 Tensorflow 运行环境
  • CSDN - 蛋白质结构预测 ESMFold 算法的工程配置

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

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

相关文章

制作电商网站帮助中心,节省60%的咨询工作量

随着电子商务的快速发展&#xff0c;越来越多的企业选择在网上建立自己的电商平台。然而&#xff0c;一旦电商网站上线&#xff0c;就会面临一系列的问题和挑战。其中一个重要问题是如何有效管理和解答大量用户的咨询和问题&#xff0c;这对于提高用户体验和促进销售至关重要。…

day1:前端缓存问题

❝ 「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长&#xff0c;方便理解和记忆。 ❞ ❝ 「主要面向群体&#xff1a;」前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 ❞ Day…

【数据治理】WKC+Minio+Airflow --20230821(链接)

https://blog.csdn.net/m0_46629123/article/details/132413616

docker安装es8.x及elasticSearch8部分api使用

docker中安装es8 1、es8的tar下载地址: tar包下载地址) 2、docker load -i es-name 3、docker run -d --name elasticsearch-8.6.2 -e ES_JAVA_OPTS“-Xms256m -Xmx256m” -p 9200:9200 -p 9300:9300 -e “discovery.typesingle-node” elasticsearch:8.6.2 4、8开始以后不支持…

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接&#xff1a;https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣&#xff0c;从字面的意思可以理解&…

Spring练习---28 (用户表和角色表分析,角色列表展示,角色层和Dao层的设置,页面展示操作)

84、下面进入我们的业务层面&#xff0c;进入我们的业务层面我们先分析一个东西&#xff0c;我们要分析用户和角色的关系&#xff0c;因为我们只有在分析完用户和角色之间的关系后&#xff0c;我们才知道表的关系&#xff0c;实体的关系 85、现在我们先画一张表&#xff0c;分析…

从FLIR热像仪图像中读取温度和原始照片: Python处理与应用的深入解析

第一部分:FLIR热像仪图像简介与Python环境准备 热像仪是一种可以检测辐射热量的设备,并将其转换为可视图像。FLIR(Forward Looking Infrared)热像仪是市面上的主导品牌之一,被广泛应用于各种场景,例如医学、军事和消费电子产品。其输出的图像不仅仅是我们看到的彩色或灰…

cUrl的介绍和基本使用

cURL 如果你在开发接口的时候&#xff0c;需要调试。那么cUrl将是你必备的技能。也许你用过postman,但这个未免太重量级了。curl将会是你最佳轻量级&#xff0c;调试接口的工具&#x1f600; 1.Curl函数的基本选项✨ 1.1 --request和 -x —request 和 -X 指定与HTTP服务器通信…

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解 一、背景二、环境硬件信息软件信息 三、FE恢复3.1 异常日志3.2 获取当前ip3.3 重置ip信息3.4 重置元数据记录3.5 元数据模式恢复3.6 重置fe集群节点3.7 关闭元数据模式重启fe 四、BE恢复4.1 获取当前ip4.2 重置ip信息4.3 重置be集群节点 一、背景 …

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…

WordPress用于您的企业网站的优点和缺点

如今&#xff0c;WordPress 被广泛认为是一个可靠、可扩展且安全的平台&#xff0c;能够为商业网站提供支持。然而&#xff0c;许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点&#xff0c;您可以确定世界上最受欢…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

软件测试-测试策略

版本1 测试策略 目录 版本1​​​​​​​测试策略 版本2测试策略 一、版本分析 测试-----6天 预发----2天 1、XXX业务1 2、XXX业务2 3、XXX业务3 二、测试策略 测试类型分析方向测试目标及用例参考是否需要测试测试结论备注功能测试对比测试用例和策划文档&#xff0c;评估…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

数据库设计规范

数据库设计&#xff08;Database Design)是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库及其应用系统&#xff0c;使之能够有效地存储数据&#xff0c;满足各种用户的应用需求&#xff08;信息要求和处理要求&#xff09;。 一、数据库设…

Android Studio导入项目需要做的一些配置

点击项目结构 选择本地安装的SDK、NDK目录 选择java版本 重新加载项目 Clean Project Rebuild Project 选择要构建的版本 可选debug和release 打包apk安装包 打包完成&#xff0c;就可以安装到安卓手机了

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…

Restful架构简单了解

Restful Rest全称representational status transfer 表述性状态转移。 原则 资源与URI URI既可以看成是资源的地址&#xff0c;也可以看成是资源的名称。如果某些信息没有使用URI来表示&#xff0c;那它就不能算是一个资源&#xff0c; 只能算是资源的一些信息而已。URI的设计…

无则插入有则更新(PostgreSQL,MySQL,Oracle、SqlServer)

无则插入有则更新 PostgreSQL 无则插入有则更新 conflict(带有唯一性约束的字段)&#xff0c;根据此字段判断是更新还是插入 INSERT INTO student(id,name,sex) VALUES(1, 小明, 男) ON conflict (id) DO UPDATE SET id 1,name 小明,sex 男;无则插入有则不做操作 INSERT I…