学员信息
- 学号:1901100244
- 操作系统:Windows 10 version 1903 (64-bit)
- 学习内容:配置本地运行开发环境
- 学习用时:6 小时
收获总结
- 成功安装了 Anaconda3 及其他软件/程序;
- 掌握了 VS Code 扩展的安装方法;
- 配置了使用 VS Code 撰写 Python 程序和 Markdown 文档的相关扩展;
- 编写了第一个 Python 程序(Hello, World!);
- 明确了提交作业的流程;
- 配置了 JupyterLab。
- 写日志的时间远多于学习时间,不知怎么评价……
遇到的难点与问题
1. Anaconda 的版本选择
本次学习特别强调,学习对象是 Python 3.x,不解答任何 Python 2.x 的问题。
这个要求事实上是暗示要安装 Anaconda3,而非 Anaconda2。实际上现在在 Anaconda 官方网站的下载页面上直接下载的 Windows 版安装包就是 Anaconda3,但助教为了方便学员,特别提供了清华大学开源软件镜像站的 Anaconda 下载页面,这个页面上有各种版本的 Anaconda,我就多想了些,觉得 Anaconda 官方网站应该也有类似的下载页面,又回忆起 2015 年的 XcodeGhost 事件,认为从安全的角度考虑,能用官方下载就不用第三方下载,就算用第三方,下载后也要想办法和官方提供的包进行 MD5 对照检查。在这种思路的引导下,我找到了 Anaconda 官方网站的所有版本下载页面(https://repo.anaconda.com/archive/),这里有各种版本及其 MD5,我就从这个页面下载了最靠上的 64 位 Windows 版安装包,下载的时候完全没有意识到这是个 Anaconda2 的包。
下载完成后我就一股脑完成了安装,安装界面上的 Python 2.7 也没有警示到我,直到有同学在学习群里贴安装截图询问的时候,我才发觉不对——为什么他的截图上显示的是“Anaconda3”,而我这里是“Anaconda2”?有什么区别?
快速 Google 了一下我就明白了,我弄错安装包了,而且更无奈的是,Anaconda2 和 Anaconda3 没法共存,所以我能做的就是——卸载 Anaconda2,另装 Anaconda3。好在我发现得早,没做更多的设置,也就没有太多的返工。
另外,我在搜索的过程中,发现了另一个 Python 3.x 强于 Python 2.7 的地方:多语言支持,简单说,就是中文支持更好。我觉得就这一条也值得用 Python 3.x。
2. PATH 的设置
PATH 指的是“环境变量”,很多人都没听说过这个东西,所以也值得一记。
设置环境变量的目的,是让某个位置的程序在任何位置都能运行。
举例来说,装好 Anaconda3 后,随带的 Python 所在的路径是 C:\Users\<UserName>\Anaconda3\python.exe
,在没有设置环境变量的情况下,Python 只能在这个文件夹下运行,在其他位置运行——比如 GitHub Desktop 管理的 hello-world
文件夹 C:\Users\<UserName>\Documents\GitHub\hello-world\
——的时候,需要输入完整的路径才可以。也就是说,运行一下“Hello, World!”程序,就需要在其所在的文件夹输入这样的指令:
1 | C:\Users\<UserName>\Anaconda3\python.exe hello-world.py |
这显然相当麻烦。
如果把 Python 所在的位置加入了环境变量,同样的工作,只需要这样输入就行了:
1 | python hello-world.py |
影响其实还不仅如此,不设置环境变量的话,很多程序自动化的功能,都会因为找不到需要的文件失效,所以设置环境变量是必不可少的一步。
Anaconda3 在安装的时候对此有所提示——
不过按照安装包的说法,是不建议使用上面这个复选框的,我就选择了安装完成后手动设置。
设置的方法是:
i. 依次打开【控制面板】-【系统和安全】-【系统】-【高级系统设置】-【环境变量(N)…】
ii. 在【系统变量(S)】区域双击【Path】
iii. 使用右侧的【新建(N)】按钮添加如下几行
1 | C:\Users\<UserName>\Anaconda3 |
注意此处的 <UserName>
需要更换为自己的账户。如果修改了默认安装的文件夹,那就按实际文件夹位置填写,要对应包含这几个位置,不要有错漏。
3. VS Code 的配置
学习手册为这一部分给出的参考文档 VS Code 官方配置 Python 环境教程其实不大适用于这一阶段,说重一点,光这一篇教程就足以劝退不少新人了。
其实如果按手册前文的要求,通过 Anaconda Navigator (Anaconda3) 安装好了 VS Code,那么 Python 的环境基本已经配置好了,更多的由于环境配置出现的问题,其实应该通过配置系统环境变量(见上文)解决。
个人认为,为了 Python 配置 VS Code 更值得参考的文档是 VS Code 扩展市场的介绍,以及 VS Code Python 入门教程。
扩展市场是发挥 VS Code 强大潜力不可或缺的一部分。其实从 Anaconda 装好 VS Code 后,Python 扩展已经默认安装了,故而只说 Python 的话,对这部分也可以不了解。不过如果需要其他功能,如 VS Code 的中文界面、Markdown 支持、颜色/图标等个性化界面配置、快捷键调整等等,都得靠从扩展市场装扩展才行,所以知道怎么操作扩展市场,是用好 VS Code 的重要一环。
如果前面该做的步骤都做完了的话,入门教程里先决条件(Prerequisites)那部分可以跳过去,从在项目(工作区)文件夹中启动VS Code(Start VS Code in a project (workspace) folder)往下看就行了。
也不用看太细(太细也搞不明白),差不多照猫画虎弄弄就行。
值得记录的几点:
i. 验证 Python 安装,在命令提示符里输入 python --version
就行,会提示现在安装的 Python 版本。入门教程里那个 py
开头的命令我怎么都没能成功运行,既然目的已经实现,我也就不纠结它了;
ii. 项目文件夹用文件资源管理器新建就行,不必纠结于命令行。对于本次学习来说,用 VS Code 菜单上的【文件(F)】-【打开文件夹…】打开昨天创建的作业文件夹就行(如 C:\Users\<UserName>\Documents\GitHub\selfteaching-python-camp\exercises\<StudentID>
,其中 <UserName>
是账户,<StudentID
是学号 );
iii. Python 解释器(Python interpreter)也可以跳过去,有问题了再琢磨这部分也不迟;
iv. 配置并运行调试器(Configure and run the debugger)后面的眼下都可以先不看了,将来有需要再回来查吧。
另外,我为了更好地用 VS Code 写日志,买了本全面讲解 Markdown 的书《了不起的 Markdown》(毕小朋著,北京:电子工业出版社,2019.8)(CSDN 相关页面、简书相关页面、百度试读页面、亚马逊电子版购买页面、京东(纸质版)购买页面),里面有一章专门讲了 VS Code,很值得一读。
4. “Hello, World!”程序
学习手册要求通过搜索引擎自行完成“Hello, World!”程序的编写,这其实不难,搜索“Python Hello World”很快就能找到相关介绍,可能造成困扰的是,不少介绍用的是 Python 2.7,和 Python 3.x 的语法并不一样,照着写就可能会出问题,这个只能多看多试了。
上文提到的 VS Code Python 入门教程里其实就有编写“Hello, World!”程序的逐步说明,所以如果认真过了一遍入门教程,这一步也就完成了。
需要注意的几个点:
i. 括号(“()”)
一定要是半角英文括号,成对出现;
ii. 引号
单引号(’)、双引号(”)、三引号(’’’或”””)有区别有联系,应注意识别,参见:https://blog.csdn.net/woainishifu/article/details/76105667;
iii. 如果想写中文的话(比如“你好,世界!”),需要在程序第一行添加
1 | # -*- coding: UTF-8 -*- |
iv. 建议在程序开头用注释的形式写明程序用途,如
1 | # -*- coding: UTF-8 -*- |
“Hello, World!”现在已经可以算是个模因(meme)了,任务之外,了解一下它的相关信息还是蛮有意思的。
5. JupyterLab 的配置
在 Anaconda Navigator 中启动 JupyterLab 就坑了我一下,先是无法启动,重启之后成功启动了,打开了默认浏览器,由于我在系统里设置的默认浏览器是 IE(为了控制微信PC版的网页跳转),出来的页面什么都没有,把网址复制到其他浏览器又要提供 Token,Token 我又找不出来,这就卡住了。
好在笑来老师写过一篇《JupyterLab 的安装与配置》,从安装 Anaconda 开始讲了 JupyterLab 的配置过程。
可我照着做的时候遇到了网络错误,痛快解决还是要设置代理——
i. conda 代理
用文本编辑器打开 C:\Users\<UserName>\.condarc
文件(<UserName>
是自己的账户),在结尾添加代理,如
1 | proxy_servers: |
注意 Anaconda 只能用 HTTP 代理。
另可参见:
How to enable proxy servers with anaconda python?
ii. pip 代理
在账户文件夹(C:\Users\<UserName>
)下新建文件夹“pip
”,在其中新建文本文档“pip.ini
”(注意扩展名),用文本编辑器将文档打开,在其中填写相关设置,如
1 | [global] |
其中 trusted-host
是可信任的安装路径,如果不是很在意的话,也可以使用中国大陆地区的镜像位置(如 pypi.douban.com
、mirrors.aliyun.com
等),速度也会快不少,使用中国大陆镜像的话,proxy
的设置也可以不用做的。
另可参见:
How to use pip on windows behind an authenticating proxy?
pip 添加 trusted host
linux 设置 pip 镜像 Pip Warning:–trusted-host 问题解决方案
调试 JupyterLab 配置文件(jupyter_notebook_config.py
)的时候又卡住很久。
笑来老师给了4个可选的配置,分别是
1 | #c.NotebookApp.token = '' |
要启用某一项,把对应行首的#
号去掉就行了。
第1项没有问题,我只在自己的计算机上用 JupyterLab,没有安全问题,启用这一项即可。
第2项设置的是启动 JupyterLab 的时候是否打开浏览器,我一时间没弄明白这是什么意思,就把它启用了,造成的效果就是从 Anaconda Navigator 里启动 JupyterLab 时进度条走完就没反应了,从 Anaconda Prompt 里输入 jupyter notebook list
可以看到服务已经启动,而且还没法用 jupyter notebook stop
命令终止服务。我来回试了数次才反映过来,直接在浏览器里访问 http://localhost:8888
就能看到 JupyterLab 了,如果要关闭的话,通过菜单【File】-【Shut Down】即可。
笑来老师提到了一个使用习惯:把一个平时不怎么用的浏览器专门用在 JupyterLab 上,那如果想要在 Anaconda Navigator 里启动 JupyterLab 时直接跳出特定浏览器要怎么办呢?还是要靠修改 jupyter_notebook_config.py
文件。
i. 首先保证 c.NotebookApp.open_browser = False
没有启用,就是行首有#
号;
ii. 在任意位置(尾部即可)添加要使用的特定浏览器
1 | import webbrowser |
其中'Kinza'
是浏览器的名字,'C:\Users\<UserName>\AppData\Local\Kinza\Application\kinza.exe'
是浏览器可执行文件的位置,注意前面有一个 r
字符,表示后面的字符串不转义。很多文档不用 r
而用 u
,实践证明,如果路径是全英文的,那还是用 r
比较好,用 u
可能会报错。
第3项用于设置 JupyterLab 可访问的根目录,如果 JupyterLab 是从 Anaconda Navigator 启动的话,这一目录实际上是 .jupyter
文件夹所在的位置,这就又平添了几分麻烦。
我所用的一台计算机,配置的是固态硬盘+机械硬盘,我根据日常的习惯,把系统装在了固态硬盘(盘符为 C
)上,又把账户下的默认文件夹(桌面、文档、图片、视频、音乐、下载等)移动到了机械硬盘(盘符为 D
)上。这一设置导致 Anaconda 和 GitHub 文件夹默认都装在了 D 盘,而 .jupyter
文件夹默认在 C 盘生成,JupyterLab 启动之后看不到 GitHub 文件夹。
笑来老师建议把这一项设置成 '~/'
,但这一设置在 Windows 上不适用,我摸索了一阵子,把它设置成了 'D:\\'
才成功打开 GitHub 文件夹里的《自学是门手艺》。
第4项用于切换 JupyterLab 和 Jupyter Notebook,我没用过 Jupyter Notebook,也没什么可怀旧的,就没启用这一项。
6. JupyterLab 系统服务配置
如果想要将来用 JupyterLab 方便一点,不必每次都从 Anaconda Navigator 启动,还是把 JupyterLab 配置成系统服务比较好。macOS 的配置方法笑来老师写了,Windows 的配置方法如下。
获取创建服务的应用程序 instsrv.exe 和 srvany.exe
instsrv.exe 和 srvany.exe 是 Windows Server 2003 Resource Kit Tools 工具集中的两个程序,配合使用可以将任何 EXE 程序作为 Windows 服务运行。
下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=17657。
instsrv.exe 和 srvany.exe 可以在安装后的安装文件夹找到,也可以用 7-Zip 等软件直接解开安装包得到。
为方便使用,建议将这两个文件放到C:\Windows\System32\
文件夹和C:\Windows\SysWOW64\
文件夹下。创建 JupyterLab 运行项
如上文所说,JupyterLab 的具体设置是依赖jupyter_notebook_config.py
文件的,为了方便启动,将其复制到jupyter.exe
所在的文件夹C:\Users\<UserName>\Anaconda3\Scripts\
下,然后创建文本文档,命名为“jl.cmd
”,在其中写入启动 JupyterLab 的指令1
jupyter lab jupyter_notebook_config.py
并保存退出。
创建服务
以管理员身份运行命令提示符,输入1
instsrv.exe JupyterLab C:\WINDOWS\System32\srvany.exe
完成服务设置
打开注册表编辑器(【开始】-【运行】-【Regedit
】),定位到:1
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\JupyterLab
在其中新建一个字符串值“
DisplayName
”,设置为“JupyterLab 服务
”,这是对本服务的描述,可填写方便辨别的内容,也可省略。
在其中新建一个项,名为“Parameters
”,再在其中建立Application
、AppDirectory
、AppParameters
三个字符串值。Application
的值为作为服务运行的程序,这里设置为C:\\Users\\<UserName>\\Anaconda3\\Scripts\\jl.cmd
AppDirectory
的值为作为服务运行的程序所在的文件夹位置,这里设置为C:\\Users\\<UserName>\\Anaconda3\\Scripts
AppParameters
的值为作为服务运行的程序启动时的参数,这里暂不设置。
注意<UserName>
要换成自己的账户名,所有的反斜杠都是两个。启动服务
打开服务(【开始】-【Windows 管理工具】-【服务】),可找到其中 JupyterLab 项,将其启动类型设置为“自动”,再启动这个服务,以后就可以不通过 Anaconda,直接在浏览器里访问 http://localhost:8888/lab? 来使用 JupyterLab 了。
注意,服务和进程并不完全关联,启动服务会启动 JupyterLab 进程,但停止服务并不会终止进程,要彻底退出,需要在停止服务后再在管理员身份的命令提示符中运行 TASKKILL /F /IM jupyter.exe /T
杀掉进程。如果在停止服务前杀掉了进程,还需要再停止服务,才能重新启动服务。
参见:
windows服务注册
使用instsrv.exe+srvany.exe将应用程序安装为windows服务
Windows下安装Jupyter,作为后台服务运行
7. 把 JupyterLab 设置为桌面应用
一直靠用浏览器访问 http://localhost:8888/lab? 来使用 JupyterLab 也有些不便,一方面不直观,另一方面浏览器的分页、地址栏、收藏夹也会占掉不少空间,可以通过使用 Chrome 应用模式启动一个很像桌面应用的 JupyterLab。
简单的方法是在命令提示符里运行:
1 | "C:\Users\<UserName>\AppData\Local\Google\Chrome\Application\chrome.exe" --app=http://localhost:8888/lab? |
然后就会出现这样的一个 JupyterLab:
更优雅的形式,是给这行命令建一个快捷方式:
在合适的位置(如开始菜单的 Anaconda3 (64-bit) 文件夹里)新建一个快捷方式,对象位置填写为"C:\Users\<UserName>\AppData\Local\Google\Chrome\Application\chrome.exe" --app=http://localhost:8888/lab?
快捷方式的名称填写为JupyterLab
点击“完成(F)”即可。
如果觉得默认的图标不好看,可以更改,JupyterLab 的图标可以在这里下载:https://github.com/jupyterlab/jupyterlab_app/tree/master/dist-resources
把这个快捷方式固定到任务栏上点击打开,会另外弹出一个图标运行 JupyterLab,此时在之前快捷方式的图标上点击右键,选择“从任务栏取消固定”,再把新弹出的图标固定到任务栏,在上面点击右键,再在弹出菜单中的浏览器程序图标上点击右键,选择“属性”,把目标修改为”"C:\Users\<UserName>\AppData\Local\Google\Chrome\Application\chrome.exe" --app=http://localhost:8888/lab?
“,点击“更改图标(C)”以修改图标,在“常规”选项卡中更改名称为“JupyterLab”,最后点击“确认”就可以了。改完可能不会当即生效,等一等就行。
其实把 JupyterLab 设置为桌面应用并不一定要用 Chrome,基于 Chromium 的浏览器都可以,由于 Chrome 我很常用,就另外装了个不常用的浏览器“Kinza”来做这件事,其他可选项可参见:https://zh.wikipedia.org/wiki/Chromium。
我在这一步也犯了不少傻,先是用了批处理文件,为了不跳命令提示符窗口又用了 VBS,为了固定到任务栏上好看又把 VBS 转成了 EXE,结果发现点击任务栏上的图标后会弹出另一个图标运行 JupyterLab,合不起消不掉,相当尴尬,最后才想起来直接设置快捷方式就行了,真是……汗。
其他参考资料:
在应用模式下启动Google Chrome
这样能将网站添加到Win10任务栏
在 Windows 上安装和配置 Jupyter Lab 作为桌面级应用程序
8. 闲话
Python、Anaconda、Jupyter 这些名字其实都有不少讲究,了解一下不失为一件趣事。
Python 的名称来自于著名的英国BBC电视喜剧《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus),Python 的创始人吉多·范罗苏姆很喜欢这套电视剧,就用其中的“Python”做了程序的名字。另外,“Python”还有巨蟒的含义,故而其徽标设计为了两条缠绕的蛇。
Anaconda 的含义则是一种南美洲热带无毒大蛇“森蚺(rán)”,其作为一个 Python 发行版,使用了一个关系很紧密的名字。Anaconda 的徽标设计与名字一致,是一条头尾相接的蛇。
Jupyter 从 IPython 衍生而来,现在的名字来源于其支持的核心编程语言 Julia、Python、R,是取了三个名字中的字母拼成的,另外“Jupyter”与“Jupiter”谐音,“Jupiter”则有“木星”的含义,这一名字还暗含了对伽利略记录木星卫星发现的笔记本的致敬。Jupyter 的徽标是木星及其卫星的抽象表达,同时还暗指了三个核心编程语言。
另可参见:
维基百科的 Python 页面
维基百科的 Monty Python 页面
谁设计了Python的徽标?
维基百科的 Anaconda 页面
Anaconda needs a new logo
维基百科的 Project Jupyter 页面
维基百科的 IPython 页面
维基百科的伽利略·伽利莱页面
维基百科的《星际信使》页面
清华大学开源软件镜像站新闻页
意大利书商伪造伽利略著作以假乱真,藏书圈风声鹤唳
总结
- 学习 Python 需要的环境配置
- Python 程序的撰写、调试方法
- JupyterLab 的配置