【学无止境】Python技术栈起步之路 (01)—— 需求与环境

1 技术之前的事情

一直以来对Python是无感的。
虽然从念书时就因项目而接触python,但自第一天翻看Python入门开始,就对这个格式另类的语言没有了一丝兴趣。相比C#/JAVA严谨清晰的语法结构,Python实在是不像一门计算机语言,它那抒情文般飘逸随性的自然语言风格,让我在编写和执行python代码时,总感觉自己面对的不是一台电脑,而是一个感性的漂亮女人,这对于一个工科技术直男来说,实在是太过于灾难了……就是这种不良反应,让我一直对Python敬而远之。

后来毕业工作了,几年来从一个代码小兵成长到团队技术负责,我一直快乐着拥抱VS+.NET开发体系,毕竟受限于所在行业特点,软件形态还是以DesktopApplication为主,所以就一路从MFC,到WinForm,再到WPF,甚至幻想着哪天自己也写一本如同《C#高级编程》一样的红宝书来,然后想办法给自己搞一张白胡子满头乱发的眼镜男照片当封面。

再后来,随着邪恶的某帝国主义的威胁进一步加剧,行业内很多项目逐步往Linux平台迁移,虽然还是以DesktopApplication为主,但原有的开发模式基本上是废废了。在经历了几个项目从调研到放弃的过程之后,LD语重心常的劝我想办法另行组建C++团队,可谈何容易啊,就算不提C++陡峭的技术曲线,单单看它在国内大环境下的持续低迷状态,就让我无法下定决心。特别是后来多次有机会和BAT成功人士们促膝长谈,在他们滔滔不绝的分析完技术栈复杂度、管理风险、工作评价体系、员工培养成本等一系列问题之后,我决定和这些头疼的问题直接不辞而别了。

但事情总得努力去做。后来一位浪迹各IT圈处处流香的大神朋友提醒我Python可能会满足我的需求,细想想,Python这个年轻的老伙计还真是上拼得了大型架构,下玩得转微服务,往左PYQT各种香,往右拳打脚踢matlab,除了速度慢点,长得丑点,但胜在生态好,人多,还真挺适合解决我现在的困境的,于是乎,在己经把一堆人带进.NET的大坑之后,即将白发丛生的我准备赶紧爬出来,开始挖PYTHON的沟。

真是应了那句话,“人无远虑,必有近忧”

2 找到适合自己的技术栈

确定了python这个目标,仅仅算是决定了方向而己。一千个人心中有一千个哈姆雷特,同样一千个人用python,每个人的用户也会是不一样的用法。对于我来说,我想要技术栈适应团队开发、适应DesktopApp、适应B/S开发,适应多语言集成(毕况手里的一堆自研C模块还值得继续用),那就必须找到适合我需求的开发方式来,而不能随便找一个入门教程来当模式。

首当其冲要确定的是IDE,既然要跨平台,宇宙第一神器VS是必须要放弃的了,其实VS一直也给我一个太重了的感觉,重到我的小苏菲看见VS就开始瘫痪。这么看来,PyCharm和Anaconda也是被PASS的命,集成度太高,灵活性太差,本来就占内存,真要是多语言去开发,插件会装到爆,运行速度相信也会让人怀疑人生。IDLE也被直接PASS,这玩意儿是个玩具吧。。。剩下的Vim、Sublime、VsCode这几款编辑器,抛去年老色衰的Vim,Sublime和VsCode我最终还是选择了VsCode,不是我不喜欢Sublime,只是微软确实把我给毒害不轻……

至于系统环境,windows应该是没跑了,虽然个人认为python+vscode是linux的菜,同时也想脱离某帝的掌控,但毕竟Python开发技术栈的探索是为了给公司探一条新的开发模式,船大难调头,从OA系统到大多数人的应用习惯还都是基于windows系统这一现状考虑,不可能专门为此去标新立异。

最终确定了适合自己的Python3开发方式,为windows系统下以vscode+插件为IDE的编辑过程,和基于GIT的版本管理过程。当然这其中我也倔强的挣扎了一下下,GIT我是不打算上vscode插件了,直接命令行,用单位一位老前辈的话,“把那些花花绿绿的后台命令行全显示出来,让他们拼命的刷屏,这样才有科技感”。这话我细想想,觉得其实挺有道理。

3 初步上手

废话一大堆,其实只是想讲清一件事,就是编程和工程项目实践实际上是完全不同的两个层面的东西,编程可以找本书去速成,学会了就可以写代码。但工程实践,则要通盘去考虑包括技术风险、方法论、人员知识水平、领导规划能力、项目核心特点、用户习惯等方方面面的因素,特别是在你己经开始担责任的时候。至于具体的代码编写能力,实在是微不足道。

理清了思路和目标,剩下的事儿就是一步步去解决问题了。虽然繁琐,但毕竟想为自己团队趟一条路出来,亲历亲为还是必要的。上手过程主体很简单,分成三个步骤:

  1. 安装Python3及pipenv
  2. 安装vscode稳定版和python相关插件
  3. 上手尝试建立画曲线版的HelloWorld项目

至于git,不是当前的核心应用目标,所以后面有时间再说吧。

3.1 安装Python3及pipenv

python3安装过程
因为是在win系统下,基本上就是上www.python.org(PYTHON官网)去下载安装包,安装就行。这里要注意的一点是,官网上己声明3.9版本开始己经不支持win7了,所以“老”系统的朋友还是选择低一些的版本试试。
在这里插入图片描述
下载链接在最下面,多种格式的,我一般喜欢选Windows x86-64 executable installer,为什么选这个只是个人喜好而己,直接安装,方便快捷。国内网下载比较慢,可以尝试复制链接到迅雷中,体验飞一般的感觉。
下载完成后双击安装即可,安装程序的第一个界面选项中,我一般喜欢选Customize installation,同时把最下面的Add Python to PATH勾上。
在这里插入图片描述
这样安装好的python环境,可以让本操作系统中的所有用户都去正常使用,同时,自动添加到环境变量后可以在CMD中直接运行python命令。当然要注意的是后面的安装路径设置时,把路径设置到各系统用户都能访问到的地方,例如C盘的Program Files下面之类的,同时注意几个待沟选的选项。
在这里插入图片描述
安装完成后,开始菜单中找“命令提示符”并打开,就是以前的控制台窗口,或CMD窗口,都是一个意思,直接在光标位置处敲

python --version

即可看到己安装python的版本号。若是提示命令错误,就去环境变量里看看是不是环境变量path没有配好,具体情况这里就不在细说了。
在这里插入图片描述

pip国内源的替换

现在各种语言也都在玩生态,各式各样的包管理器,可以用来寻找和集成各种官方或个人的扩展功能。pip作为python的自带包管理器,一般情况下都是要首先配置的,其实如果你要是在墙外,大可不必关心这事儿,只是国内的朋友们,还是选个国内的pip软件源比较好,省得后期看着下载进度条打瞌睡。
pip的国内源替换很简单,去

C:\Users\XXX(具体用户名)\

下创建一个pip文件夹,里面再放一个pip.ini文件,然后文件内写上

[global]
index-url = http://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com

就可以了。
我喜欢用aliyun的源,除此之外也有很多其余源,看个人喜好了。注意trusted-host一定要有,没有的话pip找到的东西只能看不能摸,不知道设计者当初这个设计到底是为了什么。
这里注意一个问题,我第一次写这个配置文件内容时也是一顿网上瞎查,有人写的trusted-host等号后面是有http的,换句话说就是写成

[global]
index-url = http://mirrors.aliyun.com/pypi/simple
trusted-host = http://mirrors.aliyun.com

我试过一次,好像pip下载包时还是会提示不信任源内容,我没有再继续验证这个现象。
另外,这里也还有个没有验证的问题,就是虽然python本身是所有系统用户都可以使用的,但我把pip.ini放在了个人用户文件夹下,是不是用别的用户登录后,还得重新配源,这个问题我也没有深究。

pip国内源设置完毕后,安装pipenv,这个东西我以前没注意过,以前用的是virtualenv,主要是解决不同项目不同支持包的隔离问题,说白了就是针对每个具体的项目建立一个虚拟python环境,这样就可以尽情的去pip安装第三方包而不用担心对其他项目的影响了。现在据说pipenv更方便去处理这个事情了,特别是多人协同开发过程的python环境包信息同步问题,好像解决的挺好,所以就它了。

具体安装过程
在这里插入图片描述
在这里插入图片描述
中间细节显示略过不看。安装完毕后可以用

pipenv --version

查看pipenv包的版本。

pipenv国内源的替换
pipenv和pip一样,都存在墙的问题。只是pipenv替换国内源的话,需要先建立针对特定项目的虚拟环境后,在项目文件夹下的Pipfile中将默认的https://pypi.org/simple源,替换成国内源即可。其过程因为涉及到具体项目,因此放到3.3中另行阐述。

3.2 安装vscode和python相关插件

vscode的安装
vscode官网,下载windows版本的vscode安装包,个人喜好稳定版,毕竟是奔着全团队去用的。下载时同样各种选项,个人喜好System Installer,习惯了win的方法。安装过程简单直接,就不再啰嗦了。

python插件的准备
作为一个定位为轻量级代码编辑器的平台,vscode安装完成后并不直接具备对python的开发和调试,我需求利用其丰富的支持插件,来配置python开发环境,把单纯的编辑器变成一个可自己灵活定制化的PythonIDE(集成开发环境Integrated Development Environment)。其实灵活性问题也是当初为什么没选择PyCharm的原因,PyCharm毕竟是专注于python本身的,如果我想在利用它去开发python+C/C plus的项目,虽然还是可以想办法实现,但其实还是挺不方便的。这里想多说一句,就是生态问题,代码开发需要有生态的支持,越多的人采用同样的方式做开发,遇到问题时能快速找到解决办法的机率就越高。
启动vscode后,可以看到左侧边栏上五个大按钮:

  1. 编辑开发
  2. 文本搜索
  3. 源代码控制
  4. 调试与运行
  5. 功能插件扩展
    在这里插入图片描述

这5大功能支撑起了vscode作为一个开发框架的基础,其中功能插件扩展功能,可用来利用丰富的第三方插件,完善编辑开发、文本搜索、源代码控制和调试运行这四大功能,这就是所谓灵活定制的核心。
为了开发python,我需要安装支持python开发的相关插件,点击功能插件扩展按钮,在检索栏中敲入”python",选中标注Microsoft的插件项,点击安装。至于为什么是选Microsoft的,毕竟官方插件,用得人更多,这也算是生态问题吧。
在这里插入图片描述
环境配置完成,其实就是这么简单,简单的东西,才更适合团队去用。

3.3 建立画曲线版的HelloWorld项目

创建新项目并启动虚拟环境
一般来说,首先尝试一门新语言或新IDE时,都会写个HelloWorld意思意思,这里我打算建立个画曲线版HelloWorld项目,这并不是心血来潮,而是为学习使用虚拟环境这一核心目标才这么干的。画曲线版HelloWorld需要使用matplotlib这一著名的第三方插件,首先我们先建立HelloWorld项目文件夹,文件夹所在目录并不重要,想放哪里就放到哪里,我是放到了D盘根目录下。
采用装B模式敲命令行进入项目文件夹根目录,随后利用刚才刚安装的pipenv建立项目的虚拟环境
在这里插入图片描述
这里给不熟悉的朋友们解释一下

mkdir HelloWorldProjection    //就是在当前目录下创建名为HelloWorldProjection的新文件夹,也称创建新目录
cd HelloWorldProjection       //进入名为HelloWorldProjection的目录下
pipenv install                //安装针对HelloWorldProjection项目的虚拟环境,注意这一步一定是在进入项目目录下进行,否则谁知道你是给
                              //谁安的虚拟环境
pipenv shell                  //进入虚拟环境,进入后发现命令行起始符前面有了一个大括号(HelloWorldProjection-6EFIq1X7),表明现在已
                              //经是在HelloWorldProjection项目的虚拟环境中。

这里细心的朋友可能会发现两个现象,在执行pipenv install时,项目目录下出现了Pipfile文件
在这里插入图片描述
这里这个文件实际上就是依赖管理文件,与它一起还有个Pipfile.lock文件,这哥儿俩一起定义了项目所需的安装包关系及版本,在团队开发过程中这说白了就是一个依赖库的清单,告诉每一个开发者这个项目都需要什么东西,所以这个很重要。具体机理上我暂时没进一步去研究,特别是为啥需要两个文件去解决依赖管理关系而不是一个,这里仅通过行内大神的总结,分析Pipfile.lock文件存在的意义是标识当前计算机上的项目依赖包是否是按Pipfile文件的规定去生成和管理的,换句话说就是Pipfile.lock文件是用于标识本地环境是否正常建立的,要是真是这个意思,那意味着Pipfile.lock文件一定要在源代码管理中设置为排除项。这个猜想我没有去验证,也没有去查资料,等探索到git时再说吧。
本图内容为引用
另一个现象是
在这里插入图片描述
这里提示虚拟环境本身其余并没有安装在项目文件夹下,而是偷偷的安装到了系统用户目录下的一个偏僻的地方,这个感觉和Java Maven或.Net Nuget有点差别,后两者还是会把依赖库下载到项目目录下,而pipenv则不会,这样的差别对于多人开发项目而言省去了各种源代码控制中排除项设置的工作,但可能对C盘空间小的朋友们就不太友好了。
这里还有个问题我也没去调研,即然Pipfile和这个C盘下的这个目录会建立关系,那么当win系统其他用户登录后,特别是新登用户权限无法打开创建用户的目录时,这个项目的Pipfile/Pipfile.lock文件到底是否会移情别恋的问题,就没有再深究了,毕竟现在电脑很便宜了,很少有人需要抢电脑用了。

针对项目需求在虚拟环境中安装依赖库
前面提到了曲线版HelloWorld是需要matplotlib这一著名的第三方插件的,因此这里我需要通过pipenv去为当前的虚拟环境中添加该功能包。这里需要注意的一点是,同pip一样,pipenv也存在在默认软件源访问速度慢的问题,因此这里也需要更换为国内源,按个人喜好依旧设置为aliyun的源。
具体的设置方法是修改Pipfile这个文件,把文件内的[[source]]下的url的内容从默认的https://pypi.org/simple修改为http://mirrors.aliyun.com/pypi/simple即可。
在这里插入图片描述

这个地址和上面修改pip国内源的地址是一个。这里有个问题我觉得有点奇怪,就是pipenv的源设置竟然是在具体的项目目录下,那是不是意味着每个项目在最初创建虚拟环境时都需要修改Pipfile文件去设置一遍国内源?真要是这样的话,和国外的朋友们一起开发时,Pipfile文件中的源设置该咋办?为什么不是像pip那样直接给个总的配置文件,让每个开发者根据自己的实际情况设置相应的源?这个问题暂时也搁置,待后面择机分析。
另外,这里再次强调一下,pipenv的用处是为了隔离不同项目运行环境说,说白了就是为每一个项目单独设立一份包括python解释器在内的所有第三方功能包。

pipenv的国内源配置完毕后,在虚拟环境中下载并安装matplotlib包,用于实际曲线绘制和显示功能。具体作法很简单,在虚拟环境中执行

pipenv install matplotlib

待执行完毕即可。
上面这句命令不知为什么在我这里执行了近20分钟,一度让我认为卡死了。我反复去C:\Users\用户名\.virtualenvs\HelloWorldProjection-6EFIq1X7下查看安装情况,这个包及相关依赖包共计也就56.7M,不算大啊,不知道别的朋友是什么情况。
在这里插入图片描述
安装完成后,项目目录下Pipfile文件中在[packages]里面多个一行

matplotlib = “*”

启动vscode并设定调试环境
运行环境配置完成后,直接启动vscode,我看网上很多人针对虚拟环境下启动vscode都是采用命令行方式code .,不知道这是否是唯一的方式?是否也可以采用双击图标方式启动?其实我觉得哪种方式都可以,命令行中通过pipenv shell进入虚拟环境其实更多的还是为了安装和管理第三方包方便,至于对启动vscode,应该是没什么影响的,关键还是要在vscode里设置python运行环境路径等信息到虚拟环境目录下。
在这里插入图片描述
这是启动后的状态,HelloWorldProjection已经作为当前目录设置好了
在这里插入图片描述
接下来就是我需要让vscode也知道我期望的python运行环境在哪里,这样它才能对编辑好的py文件进行解析和执行。具体方法我也是在网上找了找,同时为了了解清楚vscode的核心思想和主体功能,还专门去买了《Visual Studio Code 权威指南》这本书。
在菜单栏view中点击Command Palette菜单按钮,或直接Ctrl+Shift+P,打开命令面板,输入python,在显示出来的提示列表中选择Python:Select Interpreter,来设置可用的Python解释器,这里也包括虚拟环境。
在这里插入图片描述
选中针对本项目的虚拟环境中的Python解释器,是哪个从路径就可以看出来
在这里插入图片描述

选择完毕后,项目目录下会多出来个.vscode文件夹,里面的setting.json就是vscode针对本项目的相关配置参数,包括用什么解释器这类的。注意绿线那一行是我手敲进去的,该设置内容用来指定项目所需的虚拟环境是在哪个目录下。有了第二行这个内容,我发现vscode对第三方包在代码编辑时的智能提示都能正常出来了,用我同事的话,能“点儿“出来了。
在这里插入图片描述

建立.py文件并编写曲线版HelloWorld代码
在上图左侧项目目录右侧点击New File按钮,建立一个python文件,我起的名是main.py,其实无所谓。按最初的项目代码构想写了几行,整个代码如下

import matplotlib.pyplot as plt
import numpy

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

x=numpy.arange(0,2*numpy.pi,0.01)
y=numpy.sin(x)
plt.plot(x,y)
plt.title("Hello World! sin() Function")
plt.xlabel(xlabel="弧度值")
plt.ylabel(ylabel="sin计算结果")
plt.show()

运行
在main.py上点击右键,再点击Run Python File in Terminal开始运行。这是运行结果
在这里插入图片描述
以上就是整个上手过程。

4 感想

整个上手过程在我第二次尝试时,不算奇葩的包安装时间只花了不到15分钟,但第一次上手时,却整整花了一个礼拜的晚上。到不是有多难,网上一大堆现成的例子和帖子,想要快也能在半个小时搞定。只是,每走一步,都会发现很多很多的疑问,想要从原理上把这些疑问搞清,着实花了很长的时间和精力。回想起几年来每次面试新人,多数从培训机构出来后,都能写上几行代码,但真正在实打实的项目中,却屡屡碰壁……反思这个问题,其实最关键的地方就是老祖宗所说的”知其然也要知其所以然“。在现在这个快速到近乎浮燥的大环境里,细节的丢失,让我们如空中楼阁,根基不稳,要知道,速成只是能用来救急,人生的路还得一步一步走,饭还得一口一口吃,把成长的道路夯实了,才能走得更远,走得更稳。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值