09-01Python环境配置0.1.1

2021-03-04 01:27

阅读:723

标签:资源管理   工作环境   菜鸟   int   指针   脚本   one   pytho   其他   

Python环境配置

记录一些坑/ 知识点, 有可能不准确.

目录
  • Python环境配置
    • Anaconda vs. Miniconda
    • PATH
    • Python的模块, 包, 框架, ...
    • 版本冲突
    • Pip vs. Conda
    • PowerShell下使用Conda切换环境
    • 命令conda env
    • Shell vs. Terminal

Anaconda vs. Miniconda

Anaconda是一个很大的软件包, 包括管理器conda以及和python科学计算有关的大部分的包.
Miniconda是一个相比很小的软件包, 主要是管理器conda.

安装Anaconda的优势在于一站式服务, 什么都有, 但是坏处在于, 太多了, 首先占地方; 其次因为本地的包安装多了, 对于新手来说, 操作一旦失误就有可能导致一些莫名其妙的错误.
安装Miniconda的好处在于它小, 用户可以清楚地知道自己曾经安装了什么包, 做了什么操作, 并且每次安装后, 自己用文件管理器看一看可以知道东西安装在了什么地方(对于菜鸟用户), 坏处在于, 每次安装新的东西都需要下载.

PATH

Windows和其他操作系统里的PATH变量可以认为是一组指针, 指向程序/脚本/文件等放的地方, 这个可以从改环境变量时输入的东西--目录, 看出来. 一个程序的执行需要依赖于一些其他的程序/文件, 这时候就会在PATH的目录中按顺序查找, 如果找到了, 那就顺利执行, 如果没有找到, 就会报错说缺少什么/没找到什么. 另外的情况是, 在Shell里输入程序的名字, 如果当前目录下没有这个程序, 那么操作系统就会在PATH里保存的目录里面去查找有没有这个程序, 如果找到了, 就可以执行, 如果没有找到, 就会报错没有这个程序.

Python的模块, 包, 框架, ...

对于Python, 模块module是指一个.py文件, 包package是指一个带有_init_.py文件的文件夹.
库/框架是抽象概念, 解决一个问题的一个 模块和包的合集 叫做库/框架.

管理包, 个人使用的工具主要是pipconda, 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的版本

Pip vs. 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切换环境

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 Shel与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里的内容抄了一遍. 

Shell vs. Terminal

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混为一谈, 主要是以软件模拟器的形式存在, 有很多种, 供下载.


之后的主题预告: cuda, 安装pytorch, 连接云服务器, Docker, ...

09-01Python环境配置0.1.1

标签:资源管理   工作环境   菜鸟   int   指针   脚本   one   pytho   其他   

原文地址:https://www.cnblogs.com/chancebeauty/p/14375652.html


评论


亲,登录后才可以留言!