之前装过py环境,不过也是随便装装,知道有很多环境管理方式,这次一次性全部弄懂!
python的管理可以分为三个部分:包管理、版本管理、环境管理。但是基于工具基本可以一次性解决。
切换虚拟环境实际上就是操作了Path变量。
一般来说开发完成后会通过pip freeze > requirement.txt来导出依赖,之后再服务器上面创建一个虚拟环境,并利用这个txt来在虚拟环境中安装依赖
现在常用的有这几个pip(包管理)、conda、venc、poetry等
如果是新手建议随便选一个先用着,等玩明白了再换也不迟,没必要浪费太多时间纠结。
pip
每一个版本的python对应自己的pip工具,使用前要知道自己用的是什么版本的pip,不然依赖都装不到对的地方。
pip xxx
就是直接调用当前环境的python
python -m pip xxx
也是一样,但为什么要用这个呢?有兴趣的同学可以直接看参考中第三篇文章,或者听我接下来简单说说
DO NOT install into your global Python interpreter! ALWAYS try to use an environment when developing locally!
直接调用pip可能是调用最近安装的py版本,有可能和你想用的版本不一样,但是如果使用python3.8 -m pip
那就可以确定是3.8的pip,并且使用这个命令可以让pip自更新python -m pip install -upgrade pip
因为在windows环境中不允许覆盖pip.exe,这条命令通过python执行所以不会有问题,就是经典的“你不能修改文件,因为文件正在运行”。而且这样的好处在于不会因为失误导致版本使用错误,同时也保证了版本在语义上的唯一性。作者也十分强调使用虚拟环境。不要污染宿主环境的包,避免环境崩溃。
安装packages的几种方式
python -m pip install pack==/>= 1.1
- 使用requirement.txt,
python -m pip install -r requirement.txt
- 通过wheel
基础命令
pip search xxx
搜索包
pip list
列出已安装的包
pip list --outdated
列出过期的包和最新可用版本
pip show xxx
显示某个包的详细信息
pip freeze > xxx
导出已安装的依赖包
配置
有三种方式配置,优先级降序
- 命令行pip config
- 环境变量
- 配置文件
配置文件的范围有三种,可以通过pip config -debug查询,这几种会被依次读取覆盖,如果环境变量中存在PIP_CONFIG_FILE指定的配置文件,那么这个是第一个被读取的
- global 全局配置
- user 用户级别
- site 环境级别
管理工具
anaconda主要用于科学计算,是一个包罗万象的版本,当然也体现在大小上。
miniconda就是轻量版本,只有python和conda
conda就是管理的核心
安装
brew info miniconda
查看版本,并且得知安装后的初始化操作
brew install miniconda
安装miniconda,并且之后用info得到的初始化操作进行初始化,然后按照提示重新打开终端
conda list
没问题的话就可以看到已安装包列表了。
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/homebrew/Caskroom/miniconda/base/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh" ]; then
. "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh"
else
export PATH="/opt/homebrew/Caskroom/miniconda/base/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
如果要卸载的话记得手动去掉这一段和相关目录
基础命令
conda info
查看conda相关信息,可以配合-e查看环境信息,默认已经有base环境
conda create
创建环境,使用 --name 可以命名,对应remove命令。创建环境的时候可以通过后续跟一个python=x.x.x
来确定新环境的python版本。
conda activate xxx
激活环境,不带名字的调用就可以退出环境,也可以使用 conda deactivate
conda update
conda自更新
conda config
可以修改配置文件(默认不存在),也可以直接修改~/.condarc注意保持yml格式
--yes
来避免繁琐的连续询问
Conda和Poetry
conda对比venv来说更加强大,但是我还是先选择venv,毕竟方便,是内置的。但是conda会导致依赖往往过大,而且运行速度也不尽人意
portry则是和pip秉持一样的标准,所以包管理基本一致,而conda存在一些包管理上的问题,例如有的包没法直接安装、依赖不能跟踪。
通常会用虚拟环境来隔离各个不同版本,每个环境间的包互相隔离。但是poetry的虚拟环境无法区分python版本,所以有时会二者结合使用
virtualenv和venv
这俩是内置的工具,python2用 virtualenv, python3是venv,都是一个东西,顺带一提pip2早在2020年就停止维护了。功能上也不及前面俩大哥,只能说强在内置。表现在终端上就是有个venv的开头,通过deactivate就可以退出虚拟环境。
参考文章
- https://zhuanlan.zhihu.com/p/637760194
- https://www.360doc.com/content/23/0808/07/46368139_1091613202.shtml
- https://snarky.ca/why-you-should-use-python-m-pip/