一、Python 环境概述
1.1 Python 环境概述
Python 的环境总体上可以分为 全局环境 和 虚拟环境 两大类,二者的本质没有区别,都是一个文件夹。
所谓的 环境,本质上是由两部分组成:基本的Python解释器 和 代码所需要的第三方库。而这两部分,实际上都被放在了同一个文件夹里,所以包括这两部分的完整的文件夹,实际上就是一个Python运行的环境。
Python 全局环境 和 虚拟环境 的根本区别,实际上就是这个环境文件夹的路径,有没有被添加至电脑的环境变量之中,如果该环境文件夹路径被添加到了环境变量中,那么就成了全局环境,否则就是虚拟环境。(环境变量的意义,就是电脑在执行命令行或脚本语句:如 pip 时,会先去寻找环境变量所代表的路径下的文件)。
先看一下全局环境在文件夹中的具体内容,了解一下几个常用文件夹的作用:
- python / python.exe 是 python 解释器,即在终端输入python 时,就会执行这个程序(因为这个文件夹的路径以及被添加至环境变量中了)
- 另一个很重要的文件夹是python安装库安装目录site-packages文件夹,里面就包含了安装的所有第三方库,也就是说 pip 安装的库一般都会在site-packages中能看到。
- Scripts文件夹也十分重要,因为Scripts里面有pip.exe可执行文件,他就是我们在终端输入pip后,最终会执行的文件。除此之外,也有其他有用的可执行文件,大家可自行查阅。
1.2 Python 环境污染
环境污染主要分为两方面:
- 终端输入python xxx.py 或者 pip install xxx后,无法执行正确的python命令和pip命令。
- 在某环境中,安装了版本不匹配的第三方库,导致运行时报错。
造成原因:
- 全局环境有多个,单纯输入python时,系统不知道具体要调用哪个环境下的python脚本,因此使用了错误的环境去执行代码,或者pip将第三方库下载到了错误的环境当中。
- 全局环境中第三方库凌乱,如在一次开发中将一些包如numpy安装到了全局环境中,然后第二次开发又需要这些包如numpy的不同版本,造成版本混乱,运行报错。
解决方法:
- 在执行python命令时,不要单纯输入python,把环境所在的文件夹路径也加上,实机上vscode在运行python程序时就是这么干的。如图蓝色的就是我的要执行的环境中python.exe的位置。后面是要运行的py代码位置。
- 在Lib下的site-package文件夹检查各第三方库的版本,删除旧版本,再重装新版本。
可以看到当项目越来越多,使用的包越来越多时,如果全放在全局环境就很难搞了,运行起来麻烦且不好管理,因此对于较大的python项目,一般一定是要使用虚拟环境,而全局环境适合安装一些常用的第三方库,方便日常写简单代码使用。
1.3 虚拟环境登场
虚拟环境的作用在于,所有第三方库都会被安装在这个虚拟环境所指带的文件夹下面,然后当执行该环境中的python命令时,也只会在该文件夹下去搜寻所需的第三方库,非常好的避免了各库之间的污染。
可以通过两种方式创建虚拟环境,第一种是python自带的虚拟环境管理工具Venv,而另一种则是使用强大的Conda。
- Venv轻量: 作者认为对于第三方库不多的项目用Venv就够了,因为他是在你的项目文件夹中直接创建一个.venv文件夹,这就相当于你的虚拟环境了,里面所有的第三方库都会下载到这个文件夹里,而且pip和python命令也可以直接从这个文件夹里的Scripts文件夹下调用。但需要注意一点,创建Venv的前提是你电脑要先有基本的python解释器,Venv是在你电脑上的Python解释器基础上创建的,对于第三方库进行管理的虚拟环境。
- Conda大型:而对于一些大型或者开源的深度学习项目如LLM、YOLOv8等,则推荐使用conda了,conda的虚拟环境会从头开始帮你安装选定版本的Python解释器(跟你电脑之前下载的python解释器就无关了),然后你通过调用这个环境的pip,之后的第三方库都会下载到这个conda环境中,也就是一个.conda文件夹中。但是使用conda的时候要小心,特别是这个命令conda env -n env_name ,如果你无脑使用,那么这个虚拟环境很可能被安装在了C盘,并且导致后续的超大第三方库如Pytorch会逐渐让你的C盘爆炸。
二、Python包管理工具概述
2.1 查看 python包 的安装路径
在Python中,经常需要使用各种第三方包来扩展和增强代码功能。有时候,需要查看某个包的安装路径,以便了解它的具体位置或者将其添加到系统环境变量中。本小节将介绍几种查看Python包的路径的方法:
方法一:shell 命令行下使用 pip show
命令查看
pip
是 Python 的一个包管理器,是 Python 内置的用于安装和管理包的工具。可以使用 pip show
命令来查看已安装包的详细信息,其中包括其安装路径。
以下是使用 pip show 命令 查看 requests 包安装信息的示例:
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@master1 ~]# pip show requests
Name: requests
Version: 2.27.1
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: /usr/lib/python2.7/site-packages # 此目录下的 requests 目录即为 requests 的安装路径
Requires: certifi, urllib3, idna, chardet
Required-by:
[root@master1 ~]#
|
在输出中,Location 字段表示 requests 包的安装路径。
方法二:Python 脚本中使用 import pkgName
导入包的 __file__
属性
在 Python 脚本中,可以使用 import
语句来导入包。一旦导入成功,通过包对象的__file__
属性,可以获取包的安装路径。
以下是使用 import requests
语句导入 requests包 和 使用 requests包的 __file__
属性来查看 requests
包路径的示例代码:
1
2
3
4
5
|
import requests
print(requests.__file__)
# 输出:/usr/lib/python2.7/site-packages/requests/__init__.pyc
|
输出中的路径即为 requests 包的安装路径。
方法三:使用 pkg_resources 模块
Python 的 pkg_resources 模块(包)是一个用于访问和管理包资源的工具。可以使用 pkg_resources 模块的 get_distribution
函数来获取已安装包的信息,包括其安装路径。
以下是使用 pkg_resources
包的 get_distribution
函数来获取已安装包的信息的示例代码:
1
2
3
4
5
6
|
import pkg_resources
installDir = pkg_resources.get_distribution("requests")
print(installDir)
# 输出:/usr/lib/python2.7/site-packages
|
输出中的路径即为 requests 包的安装路径。
三、Conda 环境
3.1 Conda 包管理工具常用命令
miniconda3 安装路径 /opt/miniconda3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/opt/miniconda3/bin/conda init # 初始化主机 conda
conda create -n py36 python=3.6 # 创建 Python 3.6 虚拟环境
conda list # 查看当前虚拟环境下所有的包
conda env list # 查看主机上已创建的 Python 虚拟环境
conda info --env # 与 conda env list相同
conda info -e # 与 conda env list相同
conda activate py36 # 激活(进入)指定的 Python 虚拟环境
conda deactivate
conda env export > py_env_conf.ymal # 导出 当前环境的配置文件(在其它环境中可以使用该配置文件创建相同的 Python 虚拟环境)
conda create -f py_env_conf.ymal # 使用配置文件创建 Python 虚拟环境
conda remove -n py36 --all # 删除指定的 Python 虚拟环境
conda create -n new_env --clone old_env # 复制之前的虚拟环境的东西到另一个虚拟环境里面
# 批量导出虚拟环境中的所有组件
conda list -e > requirements.txt # 导出
conda install --yes --file requirements.txt # 安装
# 升级conda两种方式
conda updata conda
conda updata anaconda
|
3.2 conda 配置镜像源
配置镜像源的目的就是为下载库、包指定镜像源,特别是指定国内镜像源的以便在执行 conda install
或者 pip install
安装包提高下载速度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
conda config --show-sources # 查看目前存在的源
conda config --remove-key channels # 清除配置镜像源,恢复默认配置
conda config --set show_channel_urls yes # 下载时显示镜像源
# 中科大的镜像源稳定,不容易报错,配置操作如下:
# 中科大镜像源帮助文档:https://mirrors.ustc.edu.cn/help/index.html
## 配置 conda install pkg 的镜像源(配置后存在 ~/.condarc 文件中, 可编辑修改该文件)
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/pytorch/
## 配置 pip install pkg 的镜像源
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
# 清华大学镜像源,配置操作如下:
# 清华大学镜像源帮助文档: https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
## 配置 conda install pkg 的镜像源(配置后存在 ~/.condarc 文件中, 可编辑修改该文件)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/
## 配置 pip install pkg 的镜像源
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
# 临时使用一个国内镜像源单独安装一个包的时候
pip install pkg-xxx -i channal
# 中科大源、清华源、豆瓣源 channal
pip install pkg-xxx -i https://pypi.mirrors.ustc.edu.cn/simple/
pip install pkg-xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pkg-xxx -i https//pypi.doubanio.com/simple/
|