News from this site

 Rental advertising space, please contact the webmaster if you need cooperation


+focus
focused

classification  

no classification

tag  

no tag

date  

no datas

还是搞不懂Anaconda是什么?读这一篇文章就够了

posted on 2023-05-21 16:42     read(782)     comment(0)     like(18)     collect(3)


1 Introduction to Anaconda

  • overview

Anaconda , Chinese boa constrictor , is an open source Anaconda is a Python distribution focused on data analysis, including more than 190 scientific packages such as conda and Python and their dependencies.

Anaconda can easily obtain and manage packages, including python and many common software libraries and a package manager conda. Common scientific computing libraries are all included, making installation easier than regular python installation, and a release version that can manage the environment in a unified manner

  • features

    • open source

    • Simple installation process

    • High-performance use of Python and R languages

    • free community support

First of all, we need to understand the purpose of Anaconda's birth, and then understand how to use Anaconda

We need to start with python itself and find the problem from the root. We need to download a python interpreter before writing programs in the python language. This is the essence of python. Without the python interpreter, even if we write extremely correct and elegant python There is no way to run the script, so where is this interpreter? right where you installed python

[External link picture transfer failed, the source site may have an anti-theft link mechanism, it is recommended to save the picture and upload it directly (img-7mF3njHg-1651904825594)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python% E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5 %8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image- 20220507131434480.png)]

All third-party packages are placed in the site-packages folder

[External link picture transfer failed, the source site may have an anti-theft link mechanism, it is recommended to save the picture and upload it directly (img-0ZT11vrK-1651904825595) (%E5%A4%A7%E5%AD%A6/MSB/AIoT/python% E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5 %8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image- 20220507131248116.png)]

Most importantly, a python environment needs an interpreter and a package collection

Interpreter: The interpreter is roughly divided into 2 and 3 according to the version of python. Python2 and 3 are not compatible with each other, that is to say, scripts written in python2 syntax may not be able to run in the interpreter of python3

Package collection: The package collection contains built-in packages and third-party packages. We usually download third-party packages through pip or easy_install. When a python environment does not contain this package, the program that references this package cannot be installed in the python environment. run in the environment

The problem: After explaining the python environment, the next step is to explain what problems arise in such an environment, because anaconda was officially born to solve these problems

- Should I install Python2 or Python3?

Python2 and python3 are grammatically incompatible, so should I install python2 or python3 on my machine, maybe I can choose one to learn at the beginning, but if the program you want to develop must use python2 instead of python3, then this Sometimes you have to download another python2, then whose directory should the environment variable be set at this time, wouldn’t it be very troublesome if you still switch the environment variable

Although Python3 is currently used in a wider range, there are some differences before the small version of Python3

- package management

如果我在本地只有一个python环境那我所有程序用到的各种包都只能放到同一个环境中,导致环境混乱。另外当我将写好的程序放到另一电脑上运行时又会遇到缺少相关包,需要自己手动一个个下载的情况实在是烦人。要是能每个程序开发都选用不同的环境,而开发好之后又能将该程序需要的环境(第三方包)都独立打包出来就好了

- 与virtualenv的对比

  • anaconda

    是一个包含180+的科学包及其依赖项的发行版本。可以创建一个独立的Python环境,其包含的科学包包括:conda, numpy, scipy, ipython notebook等

  • virtualenv

    用于创建一个独立的Python环境的工具,新环境中需要手动安装需要的第三方包

为什么要安装Anaconda?

Anaconda对于python初学者而言及其友好,相比单独安装python主程序,选择Anaconda可以帮助省去很多麻烦,Anaconda里添加了许多常用的功能包,如果单独安装python,这些功能包则需要一条一条自行安装,在Anaconda中则不需要考虑这些,同时Anaconda还附带捆绑了两个非常好用的交互式代码编辑器(Spyder、Jupyter notebook)。

这样说会觉得有点抽象,那我们先用一个简单的例子讲解

在python中,我们写程序的时候经常离不开第三方库,我们可以称之为包。包可以理解成一个工具,我们要通过这个工具去实现我们所需要的功能。怎样使用这个工具呢?毫无疑问,我们都是import…,import…

但是,import初始只能导入python自带的库,第三方库需要我们自己通过cmd去pip install这个,pip install那个安装,及其麻烦,因为很多库都是python不自带的,我们都是要通过pip额外安装。

这个时候Anaconda的作用就出来了,Anaconda自带了很多python库,不用我们自己去额外安装,极少数我们需要安装的时候,我们通过conda install xxx就好了,及其方便!

2 conda介绍

conda是一个包管理器,环境管理器。我们可以通过命令行(Anaconda prompt 或者终端)来使用它。在Windows中是Anaconda prompt,在Linux和macOS中是终端。conda 是一个python项目,但是它支持的许多语言,例如: Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN。

为什么要使用conda?

上面说到,如果我们不安装Anaconda的话,我们安装第三方库就必须要用pip install xxx去安装,当我们安装的库多了,就会形成文件紊乱和繁杂问题。而且pip install方法会默认把库安装在同一个路径中,假如当你去做项目时,别人给你的程序用的库是低版本的,而你自己通过pip安装的是高版本的库,由于存在兼容问题,你的库不能运行该程序,而你也不可能为了这个而删去你的高版本的库去下载这个符合环境的低版本库吧,所以这及其繁琐和不方便。

这时Anaconda的作用就出来了!!!它能够创建一个虚拟环境,这个虚拟环境和你的主环境是分开的,就好像宿舍楼一样,一栋大宿舍楼有很多宿舍房间组成,每个房间都住着人,但是他们都是独立分开的,互不影响。如果你不想住宿,你随时可以退宿。也就是说,如果你创建的虚拟环境你不想要了,占内存了,你随时可以移走删除。

那么怎么通过Anaconda创建虚拟环境呢?就是conda方法!!!

总的来说,在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。

pip与conda比较:

依赖项检查

  • pip:不一定会展示所需其他依赖包

    安装包时或许会直接忽略依赖项而安装,仅在结果中提示错误

  • conda:列出所需其他依赖包

    安装包时自动安装其依赖项

    可以便捷地在包的不同版本中自由切换

环境管理

  • pip:维护多个环境难度较大

  • conda:比较方便地在不同环境之间进行切换,环境管理较为简单

对系统自带Python的影响

  • pip:在系统自带Python中包的更新/回退版本/卸载将影响其他程序

  • conda:不会影响系统自带Python

适用语言

  • pip:仅适用于Python

  • conda:适用于Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN

    conda结合了pip和virtualenv的功能

3 安装Anaconda

我这里准备好了Windows下的Anaconda3-2021的安装包,有需要的可以下载获取

链接:https://pan.baidu.com/s/13oW2IRUkJ4Of2gSELOXDRA
提取码:rwi1

下载好后,打开安装一直点击下一步就好,注意安装目录,看自己吧。我这里给出了图片流程。(2020版本安装例程)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KDfLgvXn-1651904825596)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132317697.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Fg0k1H6-1651904825596)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132334105.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZ5ksKDP-1651904825597)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132348657.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uX5e1BMn-1651904825597)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132358929.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxDwNSwR-1651904825597)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132413985.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NMX4PQQy-1651904825598)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132420442.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rGjm9w5S-1651904825598)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132424322.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frZ4soi1-1651904825598)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132428129.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oeo5SYtM-1651904825599)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132434070.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeMHKG1a-1651904825599)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132441016.png)]

安装好后,我们可以在任务栏看到Anaconda3文件夹:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Haqll1s-1651904825600)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507132720419.png)]

4 Anaconda的使用

配置Anaconda源

这一步非常重要!因为Anaconda的下载源默认在国外,如果不配置我们国内源的话,下载速度会慢到你怀疑人生的。而且很多时候会导致网络错误而下载失败。配置方法如下:

打开Anaconda Prompt,执行以下命令,将清华镜像配置添加到Anaconda中:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 
    
conda config --set show_channel_urls yes

然后我们输入conda info命令查看当前的channel,查看是否配置成功:

conda info

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VknaAMgb-1651904825600)(D:/Desktop/%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507011928106.png)]

镜像源添加完成!

5 创建虚拟环境并使用

5.1 创建虚拟环境

我们创建一个虚拟环境,然后在这个环境中配置各种各样的包,就可以在这个环境中运行目标程序的运行。

使用如下命令创建环境:

conda create -n 环境名 -y

也可以指定python版本:

conda create -n 环境名 python=x.x.x -y

python版本我们可以通过以下命令获取:

python --version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5E5YmVc6-1651904825600)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507110118106.png)]

我这里事先已经创建好了mindvision环境。

5.2 查看所有环境

安装好后,我们查看conda的所有环境,输入以下命令(二选一):

conda info --envs
conda env list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aElb7tmM-1651904825601)(D:/Desktop/%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507012631364.png)]

在弹出来的框中,我们看到mindvision环境创建成功。

5.3 激活环境

创建好环境后,我们要激活才能使用。执行以下命令(三选一):

conda activate 环境名 # linux或者windows
activate 环境名# windows
source activate 环境名 #linux

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gUcCzFR-1651904825601)(D:/Desktop/%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507013142468.png)]

由此可以看到,我们的环境从base变成了mindvision,这样我们就从base宿舍到了mindvision宿舍啦。

既然有了宿舍,我们就要住人进去啊,也就是我们要在mindvision下载我们所需要的工具包让我们使用。

5.4 安装包

执行以下命令,我们就可以下载工具包。(选择其中一种方式即可):

5.4.1 conda方式

# 在当前环境中安装包
conda install 包名称
# 指定版本号
conda install 包名称=version
# 在指定环境中安装包
conda install -n 环境名 包名称

5.4.2 pip方式

pip install 包名称 -i https://pypi.tuna.tsinghua.edu.cn/simple   #清华镜像
pip install 包名称 -i  https://pypi.douban.com/simple    #豆瓣镜像

说明:当使用conda insatll无法安装时,可尝试使用pip安装,反之亦然。

注意:

1、pip只是包管理器,无法对环境进行管理。因此如果想在指定环境中使用pip进行安装包,则需要先切换到指定环境中,再使用pip命令安装包

2、pip无法更新python,因为pip并不将python视为包

5.4.3 从Anaconda.org安装包

说明:当使用conda install无法进行安装时,可以考虑从Anaconda.org中获取安装包的命令,并进行安装。

  • 浏览器中输入http://anaconda.org(无需注册)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3MyhhKf-1651904825602)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507130016095.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ARjCAEzt-1651904825602)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507130027377.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pgi6uM1R-1651904825603)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507130033027.png)]

复制“To install this package with conda run:”下方的命令,并粘贴在终端中执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ma0FlIrl-1651904825603)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507130055904.png)]

我这里下载的是mindspore,执行命令conda install mindspore。因为我已经下载好了,这里我就不演示了。

注:在此环境安装的包,退出这个环境后是无法使用的!

5.5 查看该环境的所有包

然后我们可以查看一下环境现有的包(二选一):

conda list
pip list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH9QsM1y-1651904825604)(D:/Desktop/%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507013949451.png)]

After execution, we can see that there are a lot of packages, and the mindspore we installed before also appears here.

5.6 Test whether the installation is successful

After installing mindspore, let's test whether the environment can be used. First, we need to be in the mindvision environment, then enter the python environment, and finally import mindspore , and find that no error is reported, and the mindspore package is successfully imported. Successful installation!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gc1os3z7-1651904825604)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image-20220507104751854.png)]

6 Exit the current environment

Use the following command to exit the current environment

conda deactivate # windows
source deactivate 环境名 # linux

[External link picture transfer failed, the source site may have an anti-theft link mechanism, it is recommended to save the picture and upload it directly (img-9PMjYwSl-1651904825605)(%E5%A4%A7%E5%AD%A6/MSB/AIoT/python% E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5 %8C%96%E5%88%9D%E7%BA%A7%EF%BC%88%E4%B8%80%EF%BC%89/%E4%BB%A3%E7%A0%81/image- 20220507110907403.png)]

Note that if you have used conda activate xxx to enter different environments many times before, then use conda deactivate to return to the previous environment.

7 Remove environment /package

Use the following command to delete the specified environment (operate with caution)

conda remove -n 环境名 --all -y

Use the following command to remove the package of the current environment

conda remove 包名称

Use the following command to uninstall the package in the specified environment

conda remove -n 环境名 包名称

The above -n can be replaced by –name

In addition to the above operations, I also listed other commonly used operations:

get conda versionconda --version
Update the current conda versionconda update conda -y
update package versionconda update package name -y
update all packagesconda update --all或conda upgrade --all
copy environmentconda create -n new environment name --clone old environment name
Find package versions available for installationPrecise search: conda search -- the full name of the searched package for the parameters of the precise search
Find package versions available for installationFuzzy search: conda search contains the package name of this field name


Category of website: technical article > Blog

Author:kimi

link:http://www.pythonblackhole.com/blog/article/25269/6a3a2e2def06489848e2/

source:python black hole net

Please indicate the source for any form of reprinting. If any infringement is discovered, it will be held legally responsible.

18 0
collect article
collected

Comment content: (supports up to 255 characters)