本文内容比较庞杂,包括如下内容环境变量与可执行程序初步了解命令行(面向小白)
环境变量
python多版本共存
powershell
windows下常用cmd命令
python与cmd安装库
cmd中运行python
pip与python版本对应
import路径
虚拟环境
环境变量与可执行程序
相信很多新学python的人都遇到过这样的疑惑一个博客这样写道:安装pyinstaller库直接一条命令就完成了 pip install pyinstaller 。然后我们打开python输入却无效,殊不知它应该是在命令行中输入的
有时候让你在某一个文件夹下打开命令行输入某条命令,有时候又让你打开命令行,不清楚原理就搞不清楚应该在哪里打开命令行
有时候安装完一个软件让你配置环境变量,但是完全不知道配置这个是在干什么
有的博客写python代码竟然也是在命令行中完成的,但是你直接输入python代码却一直报错
有的人安装库是用 pip install 有的人则是用 pip3 install,这真是让人头痛
看完这篇文章,上面问题都能得到解答
命令行又称cmd、命令提示符。本文只讲解windows下的命令行命令及其与python的结合。
打开:windows10系统下,右键开始-运行(win7应该是左键开始-运行),输入cmd确定,打开了一个黑色的框,我们可以在这个框中输入命令,这就是命令行工具了。
另外还可以用文件搜索工具(比如everything)搜索电脑中的一个cmd.exe文件,双击这个文件也可以打开
基本配置:作为一个写代码的地方,cmd的使用方式不太符合我们的日常习惯,所以我们需要进行一些基础的配置。
右键左上角的图标-属性,我们可以根据自己的偏好进行调整在“字体”、“颜色”等选项卡中选择一个自己比较喜欢的字体、大小及背景颜色
在“选项”选项卡中,把快速编辑模式和启用ctrl快捷键都打上勾,这样复制粘贴既可以用ctrl+c ctrl+v,也可以都直接点击右键完成。
这样就可以正常使用了
在文件夹中打开:在打开的cmd中,我们看到在闪的光标左边有一个文件路径,比如是C:\Users\myfile,说明这个命令行是默认在myfile文件夹中打开的。
比如myfile文件夹中有一个file1文件夹,我们可以在命令行中输入
cd file1
会发现文件路径变成了C:\Users\myfile\file1 说明我们变更了命令行所在的位置
此时再在命令行中输入
cd ..
路径又会变成C:\Users\myfile,这是一条回退到父文件夹的命令
如果我们想要在指定文件夹中直接打开,而不是用cd命令一点一点调,则可以:打开file1文件夹,按住shift右键-在此处打开命令窗口,此时打开的命令行显示的路径就是C:\Users\myfile\file1了(在windows10中这种方法只能打开powershell,但是二者差别不大,当成一个东西即可,后面会细讲)
环境变量:右键此电脑-属性-高级系统设置-点击“高级”选项卡中的环境变量,我们能看到分为用户变量和系统变量,二者之中都能找到PATH,双击系统变量中的path,可以看到里面包含着一些文件路径,我们可以双击修改,也可以新建添加。一般安装一个软件让你把环境变量配置好就是在这里新建。
添加环境变量有什么用呢?
比如我的电脑里系统变量中有一个路径比如C:\Program Files\Anaconda3,我们打开这个文件夹,看里面有一个python.exe文件。
在命令行中(任意文件夹下)输入
python
回车,会出现>>>这个命令提示符,说明我们进入了Python的环境,我们可以在这里编写python代码,如果我们要退回命令行,则输入
exit()
其实输入python就是调用了C:\Program Files\Anaconda3中的python.exe,相当于双击这个文件打开了python。
所以总结起来如下:一个文件夹中有aa.exe文件,在这个文件夹中打开cmd,输入aa,就相当于双击了aa.exe文件
而如果想在任意文件夹中直接输入aa来打开此文件,就要将这个文件所在文件夹路径添加到环境变量中
环境变量的作用就是让命令行可以搜索要执行的程序的,如果没有配置环境变量这个机制,每次调用命令行都要输入全部路径,或者要从整个电脑中搜索这个exe文件
同时,这也是一个防止错误命令的机制。比如你不小心输入了一个错误命令,却不巧对应了一个exe文件,于是打开了,这可能带来一些危险性。如今限制只能在环境变量的文件夹和cmd所在文件夹下搜索命令,就严谨很多
pip与pip3:在博客教程中,有的人用pip安装库,有的人用pip3;有的人在命令行中使用python是输入python,有的人则是python3。其实原理就是有的人用的是pip.exe,有的人用的是pip3.exe。看你安装之后,配置的环境变量路径中有的是pip.exe还是pip3.exe,是哪个就用哪个,如果两个都有当然都可以用。
多版本共存:有的人电脑中既有python2又有python3,并且都要用,所以命令就要进行区分,所以一般都是让pip python表示python2环境,pip3 python3表示python3环境。这可以通过简单粗暴的重命名来实现,比如现在有python2和python3两个版本,两个文件夹中都有python.exe,此时可以将python3的文件夹中的python.exe文件,重命名为python3.exe,这样就可以调用python3命令了。修改pip也是重命名。
当安装的版本比较多的时候,可以用
where pip
和
where python3
这样的命令查看pip.exe和python3.exe所在路径,可能有好几个路径,那么调用pip命令时,默认调用的就是第一个路径下的pip.exe
powershell:windows10提供了一种和cmd很像的程序,用这个和用命令行基本上没什么区别,只是说powershell会提供更多功能(参考这里),但是这些功能应该跟我们使用python没有很大关系。关于powershell要说两件事在某个文件夹中打开powershell有两种方法。一种是按住shift点击右键-在此处打开powershell窗口;另一种是在文件夹中,点击左上角文件来选择,如下图所示
如果不需要指定在哪个文件夹中打开,可以右键开始-选择windows powershell来打开第二点是powershell会出现一个坑,就是有些命令比如where,必须where.exe python才有效,不能where python,在有些电脑中python命令也必须python.exe这样用。希望读者当发现命令无效时,可以想到这一点。
常用cmd命令dir 查看当前文件夹下的文件及文件夹,其中.表示当前文件夹,..表示上一级文件夹,有
cd file 进入当前文件夹下的file文件夹
cd folder1/folder2 或者 cd folder1\folder2 进入当前文件夹下的folder1文件夹下的folder2文件夹,即一次进入多层文件夹
cd 完整路径 进入这个路径
cd ..进入上一层文件夹
cd ../folder 进入上一层文件夹中的folder文件夹
mkdir myfolder 或 md myfolder 在当前目录下创建myfolder文件夹
type nul> my.txt 创建空白的my.txt文件
echo content>my.txt 创建内容是 content 的my.txt文件
type cmd.py 查看在当前目录下的cmd.py文件内容,把内容打印到cmd中
cmd.py 这样直接输入文件名,则用默认程序打开此文件(直接输入相当于鼠标双击)
ren oldname newname 文件改名
del aa.txt 在当前目录下删除 aa.txt 文件
del myfolder 删除myfolder文件夹中的所有文件(文件夹保留)
rd myfolder 或 rmdir myfolder 删除myfolder文件夹
tree myfolder 将myfolder文件夹下的所有文件夹展示成树状结构(不展示文件)
tree myfolder /f则展示文件夹及文件树状结构
tree myfolder /f >my.txt将输出结果输出到my.txt文件中(新建的文件)
notepad 打开记事本(mspaint、calc、sysdm.cpl、write也是可以像这样直接快速打开的)
aa 打开搜索路径下的aa.exe
aa my.txt 用aa.exe程序打开my.txt文件
where aa 查看搜索路径中哪些路径有aa.exe
cls清屏
tree /?或者md /? 即用 /?参数来获取命令的帮助文档
help 会列出大多数cmd命令,有兴趣的读者可以结合列出来的命令,和/?查看帮助来学习
cmd快捷键方向键“上”键 输入上一行代码
方向键“右”键 逐个字符输入上一行代码
F7 列出这个窗口的历史命令以供选择
ctrl + c 终止命令运行
tab 选择当前目录的子文件夹,如果输入了一部分则补全
python与cmd
1.安装库
一般使用pip install modulename来安装,如果pip.exe所在文件夹已经包含在环境变量中,则可以在任意一个文件夹下,打开一个cmd窗口,直接输入运行
卸载库用pip uninstall modulename
pip -h查看pip命令使用帮助
注意:很多时候安装报错出现一个”permission”,说明是权限问题,只要右键cmd,用管理员身份打开,然后重新运行pip install packagename即可
还有两种比较常用的安装方法
(1)首先安装wheel,直接pip install wheel,之后库用wheel安装
到这个网站里找到对应库的.whl文件下载到电脑中
然后cd到.whl文件所在文件夹中,用pip install file.whl安装,或者在任意文件夹中指定.whl文件路径pip install path/file.whl,这样即可完成安装
(2)下载库压缩文件zip或tar.gz,解压成myfile文件之后,到myfile文件路径下打开cmd,输入python setup.py install(要myfile文件夹中有setup.py文件)
其他方法见这个网站
2.在cmd中运行脚本程序
在myfile文件夹下打开cmd,输入python my.py,则运行了my.py文件,并把得到的结果返回到cmd中
运行结果打印过程中有时候会遇到编码问题,所以最好在进入cmd时,就输入CHCP 65001,让cmd窗口完全支持utf-8,否则一旦有字符无法打印出来,就会报错,如果意识不到是这里的问题,可能会查很久的错误
3.在cmd中使用python
直接输入python,就进入了python交互界面,如果要退出,返回命令行模式,输入exit()
4.指定pip安装库到哪个python下
当好几个版本的python中,都各自对应着一个pip.exe时,如果用pythonA的pip安装好了库,在pythonB中是无法调用这个库的。如果我们想控制调用pip命令安装库时,安装在哪一个python版本中,可以先指定python,用-m连接,再调用pip
python -m pip install xxx
python2 -m pip install xxx
.env/bin/python -m pip install fish
或者找到这个python对应的那个pip.exe来安装。
5.扩大import时搜索的范围
如果我们把一个包安装在pythonA版本中,而此时我们要在pythonB版本中调用这个包,无法import包怎么办?(有时是用pip安装包时没对应好python版本,不小心安装在pythonA里面了,就会出现明明安装成功了却无法调用的情况)我们希望可以控制import时寻找的路径,只要把pythonA的包的路径加入到import的查找范围中,在pythonB中就可以调用pythonA的包了。加入路径分为两种情况:临时加入和永久加入。
临时加入:
import sys
sys.path.insert(0, yourpath)
运行这两行命令则在当前环境中可以importyourpath中的包
永久加入:
在环境变量-系统内变量中,添加一个变量PYTHONPATH ,变量值为该路径,如下图所示
则以后这个路径下的包都可以被import找到了(所有版本python都能找到)。
但是这样设置在jupyter中import仍不一定能找到,想要在Jupyter中完美解决这个问题,只能设置一个每次打开jupyter都会自动执行的文件,把sys的命令放进去,详情见这篇文章
6.指定pip安装包的路径
一般来说我们没有必要指定这个,如果逼不得已可以参考这篇文章
7.查看当前cmd中运行的python是哪个路径下的
PS C:\Users> python3
>>> import sys
>>> sys.executable
'C:\\anaconda3\\python3.exe'
8. 查看pip将包安装到了哪个路径下
pip show numpy
这条命令会显示这个包的版本等基本信息,包括它被安装的位置。
9.pip换源
直接用pip从官网上安装库有时是非常慢的,可以考虑从一些镜像网站上下载,会显著提升下载速度。比如清华镜像或豆瓣镜像。
以清华镜像为例,原来安装一个库使用
pip3 install histbook
现在可以这样
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple histbook
但是这样每次安装都要输入这个地址,如果想要一劳永逸,可以进行如下配置(windows)
在C:\Users\xx\ 下创建一个pip文件夹,里面创建一个pip.ini文件,填入如下内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
保存即可生效。之后直接这样安装库
pip3 install histbook
就会默认从清华镜像下载。
10.虚拟环境
对虚拟环境的使用不熟悉的读者可以看windows下的使用和mac下的使用这两篇文章,用法非常简单。
对于初学者来说,虚拟环境非常神秘,一个纯净的开发环境,需要重新安装所有库,就像与世隔绝的世外桃源,不会与其他环境发生任何冲突一样。但是实际上并非如此。
创建一个虚拟环境的本质,就是复制一份python.exe,pip.exe,内置库等文件到新的文件夹,而不把我们后来自己安装的库复制过去。一个虚拟环境也就占20+M的空间。
激活虚拟环境的本质,是将这个虚拟环境中的python pip命令放在最上面。我们如果在这个激活了的环境中调用python,则最先搜到的是这个环境中的python,pip也是一样,因此激活后用pip安装可以安装在当前这个环境中,使用这个环境,包不会受其他环境影响就是这样。
所以如果我们能精确控制调用的是哪个python,pip把库安装在了什么位置,就根本不需要虚拟环境了(只是用虚拟环境来控制可能更省心一点)
这里需要注意一点,如果你有多个虚拟环境,比如AB两个,你之前把A虚拟环境的activate加入环境变量中了。这时进入B文件中调用activate命令,有可能你是把A虚拟环境激活了,如果你想精确地激活当前环境 ,需要用.\activate 来激活。
还有一点,如果你实现设置了PYTHONPATH,则那里面的包在虚拟环境中也是可以import的,所以虚拟环境只是一个普通的环境,并没有完全与世隔绝,如果没有深入掌握也是会出问题的。
专栏信息
专栏目录:目录