Chance的踩坑记录.
考虑到这篇博客的读者很有可能是第一次接触Python (或者分享时我可以直接丢过去一个链接过去), 这里对Python的安装做个介绍.
标注了Win-64, Win-32是微软系统的两种安装包, 标注了MacOS是苹果的安装包, 标注了Linux, 算了, 玩GNU/ Linux的默认啥都会.
首先 打开网站 https://www.python.org/downloads/
然后 下载, 无脑安装
之后 打开网站 https://docs.conda.io/en/latest/miniconda.html
然后 下载, 无脑安装.
之后的内容是对 使用过程中, 查找到的解决方案中的一些步骤 到底在干什么的一些浅显解释.
在控制台(Windows下的CMD, Mac下的Terminal)中输入python
, 如下,
PS C:\> python
如果前面的提示符PS C:\>
一类的东西, 变为了>>>
的Python的提示符, 则说明python安装成功, 如下
>>>
这里>>>
就是python的提示符, 说明目前的"环境"是python的环境.
退出python的环境需要输入exit()
, 如下
>>> exit()
PS C:\>
此时前面的提示符就回到了PS C:\
一类的东西, 说明现在的环境回到了默认的环境了. (Windows下就是CMD的环境, mac下就是类Unix的环境, 两者都是操作系统自带的, 对于简单操作, 这两个的作用都差不多.)
PS C:\> conda --v
如果输出是一串版本号的话, 就说明安装OK了. 如果输出是"没有找到conda"命令的话, 说明安装没成功, 或者是没有加入环境变量(环境变量-> PATH, 的说明见下).
Anaconda是一个很大的软件包, 包括管理器conda以及和python科学计算有关的大部分的包.
Miniconda是一个相比很小的软件包, 主要是管理器conda.
安装Anaconda的优势在于一站式服务, 什么都有, 但是坏处在于, 太多了, 首先占地方; 其次因为本地的包安装多了, 对于新手来说, 操作一旦失误就有可能导致一些莫名其妙的错误.
安装Miniconda的好处在于它小, 用户可以清楚地知道自己曾经安装了什么包, 做了什么操作, 并且每次安装后, 自己用文件管理器看一看可以知道东西安装在了什么地方(对于菜鸟用户), 坏处在于, 每次安装新的东西都需要下载.
Windows和其他操作系统里的PATH变量可以认为是一组指针, 指向程序/脚本/文件等放的地方, 这个可以从改环境变量时输入的东西--目录, 看出来. 一个程序的执行需要依赖于一些其他的程序/文件, 这时候就会在PATH的目录中按顺序查找, 如果找到了, 那就顺利执行, 如果没有找到, 就会报错说缺少什么/没找到什么. 另外的情况是, 在Shell里输入程序的名字, 如果当前目录下没有这个程序, 那么操作系统就会在PATH里保存的目录里面去查找有没有这个程序, 如果找到了, 就可以执行, 如果没有找到, 就会报错没有这个程序.
对于Python, 模块module是指一个.py
文件, 包package是指一个带有_init_.py
文件的文件夹.
库/框架是抽象概念, 解决一个问题的一个 模块和包的合集 叫做库/框架.
管理包, 个人使用的工具主要是pip
和conda
, pip
是python官方的管理包的工具, 安装python会自带pip
.
Python本身有两大版本, 一个2.x
, 一个3.x
, 它们本身互不兼容, 用了错误的解释器去执行代码, 就会报错.
(base) PS C:\> python --version #查看python版本. 注意前面的是提示符, 不是输入的代码
(base) PS C:\> pip --version #查看pip版本
(base) PS C:\> conda --version #查看conda的版本
Conda是一个包的管理器, 管理的方式是给不同版本的Python解释器创建不同的虚拟环境, 这样就保证了运行环境是单一版本的python解释器, 就不会出现错误. 具体为在???\anaconda\env\
目录下(使用Miniconda时, 就是???\miniconda\env\
), 用户每新创建一个环境, conda就在那个地方新建一个文件夹:
(base) PS C:\> conda create -n Name_of_Your_Env #创建一个新的环境, 使用默认的python版本
(base) PS C:\> # 也可以` conda create -n Name_of_Your_Env python=3.6 `来指定环境中使用的python版本
提示符前面的(base)
表示目前的工作环境, 要切换到新建的工作环境, 使用
(base) PS C:\> conda activate Name_of_Your_Env
结果为
(Name_of_Your_Env) PS C:\> #注意提示符前面的环境变了
使用Conda后, Python的默认环境是(base)
, 此时它的工作目录在anaconda\
, 而新建立的环境的工作目录在???\anaconda\envs\Name_of_Your_Env
下. 要回到默认的环境(base)
, 就是
(Name_of_Your_Env) PS C:\> conda deactivate
(base) PS C:\>
打开文件资源管理器, 可以看看Conda是怎么管理包的:
首先来到Conda的安装目录???\anaconda\
下,
env
里是虚拟环境的目录, 发现里面没有(base)
, 只有(Name_of_Your_Env)
, 说明(base)
不在env
里.???\anaconda\env\Name_of_Your_Env\
, 把里面的文件和???\anaconda\
下的对比, 发现大同小异, 说明默认的base
的Python环境就在外面, 即???\anaconda\
下, 而这个目录除了Python的环境外, 还有其他的东西, 比如Env
, 比如pkgs
.pkgs
里的东西是在任意环境下, 使用Conda
命令安装的包.???\anaconda\env\Name_of_Your_Env\
和???\anaconda\
下Python的环境中的Lib\site-packages
, 是当前环境安装的包.所以总结就是, Conda在pkgs
里放了所有安装过的包的文件, 在一个环境下要安装包, 如果pkgs
里面有这个包, 就是复制过去到环境中的Lib\site-packages
中去, 如果pkgs
里没有这个包, 就是网上下载. (所谓一次下载, 一直使用. )
注意: pkgs
里的东西不影响虚拟环境里的包, 就算pkgs
里有包的文件, 如果在虚拟环境下没有执行安装操作, Conda还是会假装你没有安装, 这样也就执行了虚拟环境的管理.
使用conda安装包:
(base) PS C:\> conda install Name_of_the_Package
(Name_of_Your_Env) PS C:\> conda install Name_of_the_Package
于是现在可以知道, 出现的
Collecting packages metadata (current_repodata.jason): done
Solving environment: done
#...一堆提示...#
The following NEW packages will be INSTALLED:
vc anaconda/pkgs/main/XXXXXXXXXXXX
Proceed ([y]/n)?
是指从本地的pkgs
里安装.
而相比, 使用pip
安装, 本身的安装的package, 从文件本身到安装的地方, 与Conda安装都是没有区别的. 唯一一点的区别, 就是pip
安装的了包, 不会被统一保存在pkgs里
, 只会在当前环境的Lib\site-packages
中保存.
PowerShell首先是不支持使用Conda切换环境的, 即activate
半天都不会出现(Name_of_Your_Env)
, 这个可以自己试一试.
PS C:\> conda activate Name_of_Your_Env
PS C:\> # 没有反应, 再测试一遍
PS C:\> conda env list
# conda environments:
#
base * file_location...
Name_of_Your_Env file_location...
PS C:\> # 这里的`*`表示当前的环境, 即说明`activate`命令没有效果.
切换到CMD, 方法一样, 发现它支持. 因为CMD太丑了, 且不支持ls
等命令, 于是得解决这个问题.
原理咱没有深究, 网上查阅的说法是: "Power Shell与anaconda的虚拟环境不兼容". 解决办法是:
以管理员身份启动PowerShell, 然后:
PS C:\> conda install -n root -c pscondaenvs pscondaenvs
PS C:\> Set-ExecutionPolicy RemoteSigned # 输入`Y`同意一下更改策略
, 之后重新启动一下PowerShell, 然后
PS C:\> conda activate base
就可以了. (看版本, 有的是activate base
)
conda env
前面提到的命令就不再重复了,
(base) PS C:\> conda env list # 列出所有的环境
(base) PS C:\> conda env remove -n Name_of_Your_Env # 删除环境
(base) PS C:\> conda list # 列出当前环境下的包
(base) PS C:\> conda remove Name_of_a_Package # 删除环境下的某个包
(base) PS C:\> conda remove -h # h是指help的意思, 所有指令通用
(base) PS C:\> conda remove -n Name_of_a_Package # n指代name, 说明后面的参数是名字
(base) PS C:\> conda remove -p PATH_of_a_Package # p指代prefix, 说明后面的参数是路径
# 这里就是把-h里的内容抄了一遍.
GUI vs. CLI:
GUI是Graphical User Interface, CLI是Command Line Interface, 一个是图形交互, 一个是命令行交互.
Shell vs. Terminal
Shell, 壳, 是操作系统中, 用于解释命令行输入的程序: Linux下是Bash, Zsh; Windows下是CMD, PowerShell; Mac自带Bash.
Console, 控制台, 早期是大型计算机的组成部分, 供管理员与Shell交互; Terminal, 终端, 早期是与大型机链接的, 普通用户手里的终端设备, 供普通用户与Shell交互.
目前人们把Console与Terminal混为一谈, 主要是以软件模拟器的形式存在, 有很多种, 供下载. (Win端做得好一点的有Terminus, Windows Terminal, Hyper, 常用的还有Putty, 或者Git Bash也是可以的.)
PowerShell可以在窗口栏右键-属性
调整字体, 背景, 透明度等, 这样会好看很多!!
PowerShell ISE可以看作PowerShell的高级一点的版本, 多一点功能.
(1) PowerShell每次启动都会加载一次路径, 每次更改路径后, 都得重新启动一次PowerShell.
(2) 设置路径时/ 安装需要命令行启动的软件时, 必须注意路径无中文/ 无空格, 否则无法正常启动.
一般安装Anaconda中, Jupyter Notebook会被顺带安装.
Jupyter Notebook也是一种IDE, 采用浏览器作为界面.
Jupyter Notebook相比于其他的IDE, 最大的优势是可以逐行运行代码, 其次是支持内嵌显示Markdown语句, 所以在数据分析中, 它可以帮助程序员边Coding边写解释文档.
如果下载的是Miniconda, 则
conda install jupyter
一类的命令可以安装.
Jupyter Notebook保存的文件的后缀为.ipnb
, 即IPython Notebook的缩写.
打开Jupyter Notebook:
PS C:\> # 开启Power Shell
PS C:\> cd C:\Users\xxxx\Documents\Codes #切换到当前工作目录
PS C:\> jupyter notebook # 打开Jupyter Notebook, 它会自动跳转到浏览器打开
也可以使用git bash打开, git bash在GUI下打开比打开PowerShell顺手2333.
使用的方法可以通过Help
-> User Interface Tour
查看.
Jupyter每个格子前面的 [数字] 只是一个数字记录, 每次运行一次或者敲一次回车, 这个 [数字] 会加一.
这里对Jupyter Notebook用法的介绍是十分友好的.
个人感觉Jupyter Notebook下编写没有VS Code体验好, 不过它能够支持逐行解释, 这是很妙的
首先得明确, 我们不想在base环境中解释代码, 特别是包和库整多了的时候;
所以需要在自己建的环境中进行解释, 所以在Jupyter Notebook中, 我们也得进行环境管理;
管理具体是通过改变解释所用的Kernel(内核)来完成的. (Kernel其实指的就是不同环境下内置的Python解释器, 取名不一样而已. )
首先还是那一套, 创建环境, 切换到想要的工作环境, 为
(env_pynb)C:\>
然后输入
(env_pynb)C:\> pip install ipykernel
然后是改这个工作环境中Kernel的名字,
(env_pynb)C:\> python -m ipykernel install --user --name TheNameYouLike --display-name "TheNameShowninJupyter"
之后欢乐地打开Jupyter Notebook, 点击内核
-> 能看到自己命名的内核, 这一步就可以了. 还可以:
(env_pynb)C:\> jupyter kernelspec list # 查看有那些Kernel
(env_pynb)C:\> jupyter kernelspec remove python35 # 删除Kernel
碰到这种情况, 首先需要仔细去看报错的内容, 如果提到了说明包没有安装, 则去conda install xxx
或者 pip install xxx
.
如果还是解决不了, 可以到工作环境下试试
(env_pynb)C:\> pip uninstall -yipython prompt_toolkit
(env_pynb)C:\> pip install ipython prompt_toolkit
还是不行的话, 试试
(env_pynb)C:\> pip install --user --ignore-installed jupyter
其他方法可以check this blog
刚刚说了, 浏览器打开的Jupyter写着没有VS Code舒服, 然后就知道VS Code也可以写Jupyter了, 具体方法就是在VS Code里打开Extension, 安装Python这个扩展包, 配置就结束了.
之后就是先打开Palette-> Ctrl+Shift+P
, 搜索Jupyter, 选择Python: Create Blank New Jupyter Notebook
这个选择即可. (Mac下打开Palette的操作是??P
)
用VS Code写, 如果要在Jupyter里添加行号, 方法是: 按
Esc
进入命令模式 ->按L
显示行号
建议使用VS Code:
作为"全干工程师", 啥都得做, 啥都得学, 要写的语言有很多种, 如果每一种语言都用一种编辑器, 那么编写代码时就会混乱. VS Code作为一种现代编辑器, 拥有很庞大的开源插件, 能够"近乎"完美地满足几乎各种语言的编辑需求, 即所有语言都可以用同一种编辑器来编辑. 这样是能够减少学习新语言的学习成本并且持续提高开发的熟练度的. (当然, 现代编辑器不只VS Code一种, 可以参考下表选择
OS 选择1 选择2 GNU/ Linux Vim Emacs Windows/ Mac VS Code Notepad++ --- --- --- Java --IntelliJ IDEA Python -- PyCharm VS_Code vs. Atom vs. Sublime_Text Markdown --Typora TeX --Overleaf or TeX_Live Android -- Android Studio
之后的主题预告: cuda, pytorch, tensor flow, 连接云服务器, docker, spark, ...
原文:https://www.cnblogs.com/chancebeauty/p/14530112.html