Python基础 虚拟环境管理 Anaconda

Posted by Zhenda on Thu, Nov 23, 2023
Total Views:

[toc]

python虚拟环境的必要性

背景:在我们实际开发的python项目,因为常常依赖第三方库,并且第三方库之间的版本也需要相互兼容,程序才可以正常执行。

痛点:

  1. 只使用一个环境运行所有python项目时,会出现版本不兼容的问题。
  2. 当第三方库很多,不便于项目迁移和部署。

方案:使用python虚拟环境。

python虚拟环境的基本原理

  1. python程序和一般电脑上的程序不同,一般程序只能安装一次,但是python程序可以 多次安装在系统的不同位置,不同位置的python程序可以安装各自的第三方包
  2. 使用运行python程序中的activate文件,可以修改 操作系统的环境变量(让操作系统知道我们想用的程序在哪),来使用不同位置的python程序

Python 包管理工具

工具层出不穷, 还没学会一个, 就来两个

工具推荐等级代表年份(首次出现 / 走红)备注 & 来源
uv✔✔✔(最推荐)2024–2025. (GitHub)Astral 的新一代工具,2024 起公开活跃并在 2024–2025 年迅速流行。
Rye✔(备选)2024. (Armin Ronacher’s Thoughts and Writings)Armin/胴体团队 2024 年左右推出并宣传为“one-stop”方案。
PDM2020(早期 2020 年开始活跃). (PDM Project)PDM 的 release/开发记录从 2020 年可见明显活动。
Poetry部分场景适合2018(初始发布). (Poetry)官方 history 显示 0.1.0 在 2018-02-28 发布。
Hatch适合写库2017(项目起始) / v1 稳定版 2022. (Hatch)Hatch 项目自 2017 开始,v1 稳定重写并在 2022 年成为稳定主线。
pip-tools老旧但稳2015(pip-tools 1.0). (nvie.com)pip-tools 1.0 在 2015 年发布(pip-compile / pip-sync)。
pip + venv基础水平pip 2008;venv(标准库)2013 前后普及. (维基百科)pip 最早可追溯到 2008,venv 随 Python3.x 标准化后在 2012–2014 逐步成为常用方案。

conda常用命令, nice!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 虚拟环境管理
# 查看所有环境和当前环境(前面有*标记的)
conda info --envs
# 切换并进入环境
conda activate 环境名
# 退出环境
conda deactivate
# 创建指定版本的python环境
conda create --name 环境名 python=3.9
# 删除环境
conda remove --name 环境名 --all

# 环境中的包管理
conda list
# 更新所有包到最新的兼容版本
conda update --all

# 导出环境包
conda env export > freeze.yml
# 导入, 注意防止环境名重复
conda env create -f freeze.yml

venv

1
2
3
4
5
6
7
8
9
# 创建环境
python3 -m venv myenv         

# 激活环境
source myenv/bin/activate


# 安装包
pip install <package>         
1
.venv\Scripts\activate

pip-tools

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
pip install pip-tools

pip-compile requirements.in
# 会删除多余包, 包严格一致
pip-sync requirements.txt




# 更新依赖包 requirements.txt
pip-compile --upgrade
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FROM python:3.11-slim

WORKDIR /app
COPY requirements.in .
RUN pip install pip-tools \
    && pip-compile requirements.in \
    && pip-sync requirements.txt

COPY . .

CMD ["python", "main.py"]

pipdeptree

1
2
3
pip install pipdeptree
# pipdeptree 默认是分析当前环境里的包
pipdeptree

uv

https://github.com/astral-sh/uv?tab=readme-ov-file

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 指定python版本创建项目
uv init --python 3.9

# 管理包
uv add requests
uv remove requests

# 同步环境
uv sync                    # 第一次会创建 .venv

# 运行python
uv run python --version


# 和 requirements.txt 交互
uv add -r requirements.txt
uv export -o requirements.txt

# pylock.toml
uv export -o pylock.toml

poetry

1
2
poetry new myproject
poetry add <package>

pyenv

不太支持windows

命令功能说明
pyenv install <version>安装指定版本的 Python,例如 pyenv install 3.9.7
pyenv uninstall <version>卸载指定版本的 Python
pyenv versions列出已安装的所有 Python 版本
pyenv version显示当前使用的 Python 版本
pyenv global <version>设置全局的 Python 版本,例如 pyenv global 3.9.7
pyenv local <version>在当前目录设置本地的 Python 版本,例如 pyenv local 3.8.5
pyenv shell <version>为当前 shell 会话临时设置 Python 版本,例如 pyenv shell 3.7.3
pyenv rehash重新生成 shims,每次安装或卸载 Python 版本后需要执行
pyenv which <command>显示当前 Python 环境中某个命令的绝对路径,例如 pyenv which python
pyenv doctor检查 pyenv 是否安装正确并配置好
pyenv update更新 pyenv 本身及其插件

其他有用的插件命令

命令功能说明
pyenv virtualenv <version> <name>创建一个基于指定 Python 版本的虚拟环境
pyenv virtualenvs列出所有使用 pyenv 创建的虚拟环境
pyenv activate <name>激活指定的虚拟环境
pyenv deactivate退出当前的虚拟环境