1.2 数据化运营所需的 Python 相关工具和组件
本书将以Python为主要数据工作工具,本节将重点介绍Python相关工具,包括Python程序、IDE、Python第三方库、数据库和客户端、SSH远程客户端、OCR工具和机器学习框架等。
1.2.1 Python程序
目前,Python仍然是两个系列的版本并存,一个是Python 2(最新版本是2.7.13),另一个是Python 3(最新版本是3.7.1)。这两个版本的语法不完全兼容,因此两个版本的程序调用对方的执行脚本很可能会报错。
从现在来看,Python 2和Python 3都已经非常成熟,因此大多数支持Python 2并且仍然开发和维护的库也开始支持Python 3。
从长远来看,Python 2终究是要被抛弃的,所以迟早是要升级到Python 3的。
但是因为Python 2如此成熟且被广泛应用,所以即使被抛弃也不是短时间内的事情。为了解决Python迁移问题,官方提供了Python 2到Python 3的编码转化工具,具体查阅https://docs.python.org/3/library/2to3.html#to3-reference。
熟悉Python 2的工作者再学习Python 3会非常容易,毕竟二者只是在编码、语法、字符串、字节串、数据类型等方面做了一些变动,而不是语法和程序规范全部变更。有关Python 3的新功能介绍,具体查阅https://docs.python.org/3/whatsnew/3.0.html。
因此,对于如何选择Python版本不应该过于纠结,因为不论选择哪个版本对现在和未来工作的影响都微乎其微。但结合特定场景,笔者还是建议:
如果想要成熟、可靠且稳定的程序,选择Python 2。
如果只是想学习或了解一下Python,Python 2和Python 3都可以。
如果是企业内部应用,具体看企业用的是哪个版本。
如果你的工作中需要大量的第三方库,那么使用Python 2会让你有更多选择。
如果你的程序需要在Linux服务器上运行,那么去看看你的Linux服务器自带的Python是什么版本(Linux服务器上自带Python 2的居多)。
如果上述没有任何一个场景满足你的需求,那么就从Python 2开始吧。由于历史原因,Python 2有更多的应用案例、专业书籍和知识讨论分享社区。
相对于是选Python 2还是选Python 3,选择32位还是64位的版本影响反而更大一些,因为这个涉及与系统平台和第三方应用的兼容和集成。大多数情况下,建议选择32位的Python版本,因为很多软件及Python第三方库默认都是32位版本(尤其是一些比较早期的库)。
当确定了Python的具体版本之后,就可以到Python官网下载对应平台和版本的程序了,Python官网地址为https://www.python.org/downloads/。
本书的案例基于32位Python实现的,版本是Python 2.7.12。
1.2.2 Python IDE
Python自带IDE,可以满足一定的数据开发和测试需求,在交互型的开发和学习上,也有IPython可供选择。但这里建议大家选择另外一个Python IDE工具——PyCharm。
PyCharm带有一整套可以帮助用户在使用Python语言开发时提高效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制并可集成IPython、系统终端命令行等。在PyCharm里几乎可以实现所有有关Python的工作。图1-2是PyCharm工具界面截图。
图1-2 PyCharm工具界面截图
有关PyCharm的更多信息可查阅http://www.jetbrains.com/pycharm/download/#section=windows,在该网址下可下载对应操作系统的版本。这里提醒大家,在选择版本时,由于我们以学习为目的,故选择免费的社区版本即可。本书中用到的PyCharm版本是2016.3.2社区版。
1.2.3 Python第三方库
Python第三方库包括交互开发库、科学计算库、机器学习库、自然语言库、数据库连接库、图像处理库、网络爬虫库、图像展示库等。因第三方库较多,故本节介绍的第三方库都是本书中会用到的,其他未用到的库暂时不做介绍,但为大家学习方便,我们会在附录里面提供完整列表。
对于Python第三方库的安装,除了使用setup命令外,大多数都可以通过pip和easy_install命令安装。这里推荐使用pip进行本地或在线安装,因为采用该命令安装2.7.*(准确讲是Python 2≥2.7.9或者Python 3≥3.4)版本时系统会按默认设置自动安装完成。
1.第三方库的安装
(1)使用setup命令从源码安装
每个第三方库都有一个源码文件压缩包,格式为.tar.gz或.zip,例如pandas-0.19.2.tar.gz、numpy-1.12.1.zip。将压缩包从pypi(或其他官方资源)中下载到要安装的服务器或本机并解压(这些步骤都非常简单),然后在系统终端的命令行窗口执行setup命令即可。以“pandas-0.19.2.tar.gz”文件为例说明整个过程:
1)下载源码压缩包文件:不同的系统下载方法不同,最简单的方法是直接打开https://pypi.python.org/pypi/pandas/0.19.2并下载名为“pandas-0.19.2.tar.gz”的文件到本地,然后使用客户端工具复制到服务器。
2)解压文件:打开系统终端的命令行窗口,进入该文件的下载路径(或拷贝路径)并解压,执行如下命令:
cd [压缩包文件路径] tar -zxvf pandas-0.19.2.tar.gz [解压后的路径]
上述命令执行后,会在制定的[解压后的路径]中解压当前压缩包的内容。
3)执行setup命令:在系统终端的命令行窗口中,进入解压后包含setup.py的路径(通常是[解压后的路径]/pandas-0.19.2),执行如下命令:
cd [解压后的包含了setup.py的路径] python setup.py install
上述代码会默认执行完成,如果环境配置正确会有提示安装成功。
离线安装第三方库/包时,不同的库/包可能存在依赖关系,如果在安装之前没有安装和配置好相应的包,那么可能报错。例如安装statsmodels 0.8时,依赖Python≥2.6、Numpy≥1.6、Scipy≥0.11、Pandas≥0.12、Patsy≥0.2.1等,因此大多数情况下,不建议手动离线安装。
(2)使用pip命令从whl文件安装
使用pip安装Python第三方库更加简单,只需先将符合要安装库的系统环境的whl文件下载到服务器或本地,然后在系统终端的命令行窗口输入命令pip install[PackageName.whl]即可。
仍然以上述Pandas安装为例说明整个过程。
1)下载whl文件:不同的系统所需要的whl文件不同,这需根据实际系统版本和Python程序版本而定。以笔者的Windows环境下32位的Python 2版本为例,笔者在https://pypi.python.org/pypi/pandas/0.19.2处下载名为“pandas-0.19.2-cp27-cp27m-win32.whl”的文件到本地。
2)安装whl文件:在系统终端的命令行窗口中进入下载路径(笔者路径为桌面),执行如下命令:
cd C:\Users\Administrator\Desktop pip install pandas-0.19.2-cp27-cp27m-win32.whl
命令执行完成之后,也会提示安装成功。
使用pip命令安装包时,需要在系统终端的命令行窗口而非Python或IPython工作界面中执行相应命令。进入Windows终端的命令行窗口的方法是使组合件Win+R,然后在弹出的窗口中输入“cmd”,最后点击“确定”按钮。
3)使用pip进行在线安装:大多数情况下,都建议采用pip进行在线安装,通过pip在线安装可以解决不同包之间的依赖关系(自动下载依赖包)。
在线安装的方法非常简单,只需在系统终端打开命令行窗口,然后输入如下命令:
pip install [PackageName]
以上述Pandas安装为例,在联网的前提下,只需直接在系统终端命令行输入“pip install pandas”即可完成安装。
pip本身是一个非常强大的第三方库/包管理工具,包括下载、安装、升级、卸载、搜索、查看过期和版本等功能。有关pip的更多信息,可查阅https://pip.pypa.io/en/stable/。
考虑到数据化运营所需的Python相关工具和组件的URL比较多,笔者会在附件的lib文件夹中将所有URL整理为一个名为“lib_url.txt”的文件,同时本书所用到Windows下32位Python 2的第三方安装库(whl文件),也会在该文件夹下,读者有需要可以使用pip命令安装。
2.第三方库简介
(1)交互开发库——IPython
IPython是一个基于Python的交互式shell,比默认的Python shell好用得多,支持变量自动补全、自动缩进、交互式帮助、魔法命令、系统命令等,内置了许多很有用的功能和函数。在本书所说Python第三方库中,若无特殊说明,默认使用IPython作为交互和测试工具。
IPython的安装可直接在系统终端的命令行窗口使用pip install ipython完成。安装成功之后,进入系统终端命令行窗口,输入ipython,回车后进入交互开发界面,如图1-3所示。
图1-3 IPython交互开发界面
本书所用IPython版本是5.3.0。有关IPython的安装和更多信息,可查阅http://ipython.org/。
(2)科学计算库
Numpy
Numpy(Numeric Python)是Python科学计算的基础工具包,它提供的功能包括:
快速高效的多维数组ndarray,大多数Python的多维数据组都是基于Numpy进行处理的。
基于数组整体或元素级别进行科学计算的能力,需要迭代循环。
比较成熟的(广播)函数库。
用于整合C、C++和Fortran代码到Python的工具包。
实用的线性代数、傅里叶变换和随机数生成函数。
Numpy和稀疏矩阵运算包Scipy配合使用更加方便。
多种库和算法间进行数据交互的“数据容器”,由低级语言(例如C)编写的库可直接读取Numpy的数据而不必经过转换。
默认情况下,我们可以使用pip install numpy命令对Numpy进行安装,但考虑到我们即将要使用的Scipy 0.19.0中需要依赖于Numpy+mkl,因此我们选择一次性将这两个包一起安装,方法如下:
第一步 从http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy中下载numpy-1.11.3+mkl-cp27-cp27m-win32.whl。
第二步 打开命令行窗口,使用cd[路径]命令进入上述whl文件的下载路径。笔者的下载路径为Windows桌面,路径为C:\Users\Administrator\Desktop。
C:\Users\Administrator>cd C:\Users\Administrator\Desktop
第三步 使用pip install[本地PackageName].whl命令安装本地下载的包。
C:\Users\Administrator\Desktop>pip install numpy-1.11.3+mkl-cp27-cp27m-win32.whl
安装成功之后,在IPython中输入import numpy时,若不报错则说明该库已经成功安装并导入。本书中用到的Numpy版本是1.11.3。
查看Numpy(以及其他库)的版本常用的有两种方式:
1)在Python或IPython中导入库后通过__version__属性查看:
In [1]: import numpy In [2]: print (numpy.__version__) 1.12.1
2)在命令行窗口(非Python或IPython工作窗口)输入pip list,系统会返回所有安装的第三方库以及版本列表信息,从中找到Numpy即可:
C:\Users\Administrator>pip list DEPRECATION: The default format will switch to columns in the future. You can us e --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.con f under the [list] section) to disable this warning. appdirs (1.4.3) asn1crypto (0.22.0) backports.shutil-get-terminal-size (1.0.0) beautifulsoup4 (4.5.3) cffi (1.9.1) matplotlib (1.5.3) mysql-connector-python (2.1.5) nose (1.3.7) numpy (1.11.3) pandas (0.19.2)
有关Numpy更多信息,请查阅http://www.numpy.org/。
Scipy
Scipy(Scientific Computing Tools for Python)是一组专门解决科学和工程计算不同场景的主题工具包,主要功能包括:
数值积分和微分方程求解器。
扩展了有numpy.linal的线性代数历程和矩阵分解功能。
函数优化器(最小化器)以及根查找方法。
信号处理工具。
系数矩阵和系数线性系统求解器。
在其他环境下,安装Scipy时直接使用pip install scipy即可,但在Windows 32位Python环境下该命令会报错,原因是在pypi.python.org库(也就是pip引用的服务器资源库)中找不到32位下的与Python 2对应的Scipy安装包。除了可以源码安装Scipy外,还可通过如下方法进行安装。
第一步 从http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy中下载scipy-0.19.0-cp27-cp27m-win32.whl。
第二步 打开命令行窗口,使用cd[路径]命令进入上述whl文件的下载路径。笔者的下载路径为Windows桌面,路径为C:\Users\Administrator\Desktop。
C:\Users\Administrator>cd C:\Users\Administrator\Desktop
第三步 使用pip install[本地PackageName].whl命令安装本地下载的包。
C:\Users\Administrator\Desktop>pip install scipy-0.19.0-cp27-cp27m-win32.whl
安装成功之后,在IPython中输入import scipy时,若不报错则说明该库已经成功安装并导入。
本书中用到的Scipy版本是0.19.0。有关Scipy的更多信息,请查阅https://www.scipy.org/install.html。
Pandas
Pandas(Python Data Analysis Library)是一个用于Python数据分析的库,它的主要作用是进行数据分析。Pandas提供用于进行结构化数据分析的二维表格型数据结构DataFrame,类似于R中的数据框,能提供类似数据库中的切片、切块、聚合、选择子集等精细化操作,为数据分析提供了便捷。另外,Pandas还提供了时间序列功能,用于金融行业的数据分析。
Pandas的安装直接使用pip install pandas命令即可。安装成功之后,在IPython中输入import pandas时,若不报错则说明该库已经成功安装并导入。
本书中用到的Pandas版本是0.19.2。有关Pandas的更多信息,具体查阅http://pandas.pydata.org/。
Statsmodels
Statsmodels是Python统计建模和计量经济学的工具包,包括一些描述性统计、统计模型估计和统计测试,集成了多种线性回归模型、广义线性回归模型、离散数据分布模型、时间序列分析模型、非参数估计、生存分析、主成分分析、核密度估计以及广泛的统计测试和绘图等功能。
Statsmodels的安装则直接使用pip install statsmodels即可。安装成功之后,在IPython中输入import statsmodels时,若不报错则说明该库已经成功安装并导入。
本书中用到的Statsmodels版本是0.8.0。有关Statsmodels的更多信息,具体查阅http://statsmodels.sourceforge.net/index.html。
(3)机器学习库——scikit-learn
scikit-learn(又称Sklearn)是一个基于Python的机器学习综合库,内置监督式学习和非监督式学习两类机器学习方法,包括各种回归、K近邻、贝叶斯、决策树、混合高斯模型、聚类、分类、流式学习、人工神经网络、集成方法等主流算法,同时支持预置数据集、数据预处理、模型选择和评估等方法,是一个非常完整的机器学习工具库。scikit-learn是Python数据挖掘和机器学习的主要库之一。
scikit-learn缺少了某些常用算法,例如关联规则算法、时间序列算法等。不过结合Pandas和Statsmodels可以实现时间序列算法。关联规则相对简单,pipy上也有很多开源库,当然如果你动手能力强,使用Python自行编写难度也不大。对于这些内容,在后续的模型和案例中,我们会重点介绍。
scikit-learn的安装则直接使用pip install sklearn即可(注意库名称为sklearn)。安装成功之后,在IPython中输入import sklearn时,若不报错则说明该库已经成功安装并导入。
本书中用到的scikit-learn版本是0.18.1。有关scikit-learn的更多信息,具体查阅http://scikit-learn.org/stable/index.html。
在安装scikit-learn之前一定要确保Numpy(含mkl)、Scipy、Matplotlib按顺序安装,这样才能保证不同库的依赖关系正确建立,否则可能会导致scikit-learn安装或导入报错。
(4)自然语言处理库
结巴分词
由于NLTK本身不支持中文分词,因此在针对中文的处理过程中,我们会引入其他分词工具,例如结巴分词。结巴分词是国内的Python文本处理工具包,分词模式分为三种:精确模式、全模式和搜索引擎模式。结巴分词支持繁体分词、自定义词典等,是非常好的Python中文分词解决方案,可以实现分词、词典管理、关键字抽取、词性标注等。
结巴分词的安装直接使用pip install jieba命令即可。安装成功之后,在IPython中输入import jieba时,若不报错则说明该库已经成功安装并导入。
本书用到的结巴分词的版本是0.38。有关结巴分词的更多信息,具体查阅https://github.com/fxsjy/jieba/。
Gensim
Gensim是一个专业的主题模型(主题模型发掘文字中隐含主题的一种统计建模方法)Python工具包,用来提供可扩展统计语义、分析纯文本语义结构以及检索语义上类似的文档等功能。
Gensim的安装直接使用pip install gensim命令即可。安装成功之后,在IPython中输入import gensim时,若不报错则说明该库已经成功安装并导入。
本书中用到的Gensim版本是1.0.1,具体查阅http://radimrehurek.com/gensim/。
(5)数据库连接库
数据库存储是企业数据存储的基本方式,数据库类型包括MySQL、Oracle、SQL Server、DB2、Sybase等,基于大数据场景下还会包括Hive、HBase、MongoDB、Redis等的数据存储。
MySQL连接库
为了方便读者练习和应用,本书使用MySQL数据库进行数据存储、查询等操作。要使Python连接MySQL,既可以通过MySQL官方连接程序,也可以使用第三方库来实现。
使用MySQL官方程序时,可到https://dev.mysql.com/downloads/connector/python/直接下载对应版本Python的程序,笔者下载的是mysql-connector-python-2.1.5-py2.7-win32.msi。然后直接安装即可,中间没有任何配置。安装成功之后,在IPython中输入import mysql.connector时,若不报错则说明该库已经成功安装并导入。
在选择32位还是64位时,需要注意的是,这里指的是Python的版本,而不是操作系统版本。例如笔者的电脑为64位Windows,但安装的是32位的Python,因此,选择的是mysql-connector-python-2.1.5-py2.7-win32.msi。
使用第三方库MySQL-python时,登录https://pypi.python.org/pypi/MySQL-python/下载对应版本的安装包即可。目前该库已经很长时间没有更新,并且只支持32位的Python 2。安装成功之后,在IPython中输入import MySQLdb(注意大小写)时,若不报错则说明该库已经成功安装并导入。
两种连接方式选择任意一个使用时都没有问题,但考虑到官方连接程序支持的平台和版本更多,因此,这里推荐使用官方连接。
MongoDB连接库
由于不同企业的大数据平台的数据存储不同,并且即使是同一种存储方案,也会由于系统环境和存储组件的版本不同导致适配和连接的差异,本节仅以MongoDB连接包为例进行说明。
MongoDB是由C++语言编写的分布式文件存储的数据库,它是以Key-Value(键值对)形式面向文档存储的非关系型数据库。
Python连接MongoDB可以使用PyMongo(MongoDB官方驱动程序)。通过pip install pymongo对PyMogo进行安装,安装成功之后,在IPython中输入import pymongo时,若不报错则说明该库已经成功安装并导入。
本书中用到的PyMongo版本是3.4.0。有关PyMongo的更多信息,具体查阅http://api.mongodb.com/python/current/tutorial.html。
(6)HTML处理库——Beautiful Soup
网络是企业重要的外部数据来源,因此获取和处理HTML的信息是Python数据接入和处理的重要能力。
Beautiful Soup是网页数据解析和格式化处理工具,它严格意义上来讲不是一个纯抓取类的工具,因为它不具备抓取能力,通常配合Python的urllib、urllib2等库一起使用。
Beautiful Soup的安装直接使用pip install beautifulsoup4(注意后面有个“4”)命令即可。安装成功之后,在IPython中输入import bs4(注意导入的库名跟安装的库名不一致)时,若不报错则说明该库已经成功安装并导入。
本书中用到的Beautiful Soup版本是4.5.3。有关Beautiful Soup的更多信息,具体查阅https://www.crummy.com/software/BeautifulSoup/。
(7)图形展示库——Matplotlib
图形展示是数据可视化的必要内容,在Python中,通常使用Matplotlib实现图形展示。
Matplotlib是Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,开发者可以仅需要几行代码,便可以生成绘图、直方图、功率谱、条形图、错误图、散点图等。
Matplotlib的安装直接使用pip install matplotlib命令即可。安装成功之后,在IPython中输入import matplotlib时,若不报错则说明该库已经成功安装并导入。
本书中用到的Matplotlib版本是4.5.3,具体查阅http://matplotlib.org/。
(8)图像处理库
图像处理提供针对视频和图像数据的输入、分析、处理和挖掘等功能,Python最常用的图像和视频处理库是PIL和OpenCV。
PIL
PIL(Python Imaging Library)是一个常用的图像输入、处理和分析库,提供了多种数据处理、变换的操作方法和属性。
PIL的安装直接使用pip install PIL(注意大小写)命令即可。安装成功之后,在IPython中输入import PIL(注意大小写)时,若不报错则说明该库已经成功安装并导入。
本书中用到的PIL版本是1.1.7。PIL的安装依赖于Python(=2.7.*),不支持Python 3,有关PIL的更多信息,具体查阅http://www.pythonware.com/products/pil/。
OpenCV
OpenCV是一个强大的图像和视频工作库。它提供了Python、C、C++和Java接口,支持Windows、Linux、Mac OS、iOS和Android。OpenCV的设计效率很高,它以优化的C/C++编写,库可以利用多核处理。除了对图像进行基本处理外,还支持图像数据建模,并预制了多种图像识别引擎。
OpenCV的安装无法直接使用pip命令实现,需要手动下载OpenCV源文件,然后将特定文件复制到Python第三方库目录下。下面以Windows为例介绍具体过程。
第一步 进入http://opencv.org/opencv-3-2.html,点击“Windows self-extracting archive:sourceforge”,会打开一个新的页面并自动下载一个名为“opencv-3.2.0-vc14.exe”的文件。
第二步 下载完成后,双击该文件,按照提示将OpenCV的源码解压到任意目录。
图1-4 解压OpenCV代码到任意目录
第三步 找到解压文件中路径为*\opencv\build\python\2.7\x86中的“cv2.pyd”文件,然后复制到Python的第三方库路径,路径地址为*\Python27\Lib\site-packages。
上述操作完成后,在IPython中输入import cv2(注意库名)时,若不报错则说明该库已经成功安装并导入。
本书中用到的OpenCV版本是3.2.0。有关OpenCV的更多信息,请查阅http://opencv.org。
(9)其他库
根据实际案例,书中还会安装其他第三方库/包,具体会在场景中说明,在此不一一列出。
1.2.4 数据库和客户端
在本书中,大多数案例数据都会直接从数据库中读取,因为实际应用中的运营数据基本也是在数据库中直接获取并进行初步的数据探查工作,因此数据库是开展数据工作的基础工具。为了提高数据库的操作和使用效率,并能使更多读者快速入门数据库应用,我们会使用客户端工具,通过界面化的方式降低数据库的应用难度。数据库我们选择MySQL,客户端使用Navicat。
关于MySQL和Navicat软件的网络资源非常丰富,请读者自行寻找并下载安装相应版本,笔者的MySQL版本为32位版本5.0.51b。以下是有关MySQL配置过程中的关键点。
1)设置模式,如图1-5所示。
图1-5 设置MySQL模式
选择Detailed Configuration,目的是自己配置所有信息。
2)服务器实例配置,如图1-6所示。
图1-6 配置服务器实例
如果本地电脑是多用途的,那么建议选择Server Machine,兼顾效率和其他应用;如果优先要保证其他大型应用对资源的占用,那么选择Developer Machine;如果要优先保障数据库资源,那么选择Dedicated MySQL Server Machine。
3)设置字符集,如图1-7所示。
图1-7 设置字符集
这里选择手动设置,数据库字符集为gb2312,目的是兼容中文字符集并不至于使字库容量过大。
数据库安装并配置完成之后,通过Navicat客户端进行连接。方法是:点击顶部菜单“文件→新建连接→MySQL”,在弹出的对象框中配置如下信息:
连接名:用来识别不同连接的名称。
主机名/IP地址:本地使用127.0.0.1,远程服务器填写实际IP地址。
埠(端口):在配置MySQL时设置的端口,默认为3306(具体取决于配置MySQL时的设置)。
用户名和密码:在配置MySQL时创建的用户名和密码。
输入完成后,点击“连接测试”,如果信息配置正确并且MySQL服务可用,那么会返回“连接成功”字样。
图1-8 新建数据库连接
有关使用客户端以及通过Python直接操作数据库的具体方法会在后续案例中详细介绍。
1.2.5 SSH远程客户端
对于数据工作而言,如果只是在本机上做数据分析处理和建模工作,通常只能利用有限的个人电脑性能实现有限规模的数据计算。当数据计算量或数据规模很大时,通常会选择在本地进行数据测试,然后到服务器上运行Python程序。此时,我们需要一个能在本机和服务器之间进行数据、信息和指令交互的SSH远程客户端工具。
对大多数数据工作者而言,本地电脑以Windows系统居多,而服务器以Linux系统居多,因此SSH远程客户端工具的主要作用就是连接Windows和Linux。此类工具很多,包括XShell、SecureCRT等,笔者使用的是SecureCRT。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论