python 多环境下配置运行

前言

在面对Python不断多的版本迭代中,我们有时候需要兼容不同的环境来运行项目,所以我们得要有多个版本的运行空间,然后就有了Anacondauv

Anaconda

mac环境下,可以直接通过homebrew来实现直接安装brew install anaconda,同时配置下对应的环境变量

bash 复制代码
# anaconda
export ANACONDA_DIR=/opt/homebrew/anaconda3
export PATH=$ANACONDA_DIR/bin:$PATH

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!

__conda_setup="$('/opt/homebrew/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/homebrew/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/homebrew/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/homebrew/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup

# <<< conda initialize <<<

win环境下,我们通过去官网下载anaconda,官网地址:www.anaconda.com/download ,也是配置对应的环境变量,配置对应的Path

使用anaconda

  1. 查看环境列表,获取当前拥有的环境
bash 复制代码
conda env list
  1. 激活指定的环境,通过环境别名,如上图我选python38
bash 复制代码
source activate python38
  1. 已经在当前环境下了,如果我想下载对应的依赖可以直接使用conda install,如果想用pip也可以直接使用pip install 。 注意:未激活环境直接用 pip ,可能安装到 base 环境或系统 Python
css 复制代码
conda install [package]
pip install [package]
  1. 修改国内镜像源,condapip的都统一进行修改镜像源
ruby 复制代码
# 使用清华源(推荐)
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/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes

注意:修改pip的镜像源,是对所有环境下的pip都会直接生效

arduino 复制代码
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn

查看获取当前的镜像源配置信息

lua 复制代码
conda config --show channels
pip config list
  1. 当我想退出该环境,此时就会回到base环境

    conda deactivate

  1. 安装新的环境,可以通过查看可安装的指定版本,然后安装时指定版本和环境名即可
sql 复制代码
# 查看可安装的
conda search python --full-name
ini 复制代码
# 创建指定版本的安装 例如,指定3.12.11
conda create -n python312 python=3.12.11

uv

同理,在mac环境下,可以直接通过homebrew来实现直接安装

复制代码
brew install uv

使用uv

  1. 获取对应python可用的版本

    uv python list

  2. 创建项目和环境,指定项目名称,可以快速生成一个脚手架

此时会创建一个你指定项目名称的文件夹,包含以下文件列表

  • pyproject.toml : python项目的核心配置文件
  • .gitignore : git的忽略文件
  • main.py : 示例的主执行文件

注意: 但不会自动创建虚拟环境.venv

csharp 复制代码
uv init [project项目名称]
  1. 指定虚拟环境.venv的同时创建python指定版本
css 复制代码
uv venv --python 3.11 .venv

此时项目文件会多一个.venv文件夹,里面包含bin(可执行文件和python的内容)和lib对应的项目依赖内容

注意: 如果你安装的版本和项目初始化时候文件指定的需求版本不一致,可能后面运行时会自动将你虚拟环境删除,安装它最需要的版本

  1. 添加依赖

可以使用 uv add 来添加依赖,会直接写入pyproject.toml文件 ,注意:当用uv pip则不会写入 pyproject.toml文件

erlang 复制代码
uv add ...
uv remove ...

uv pip install ....
uv pip uninstall ....
uv pip install -r requirements.txt # 从指定文件中安装依赖

注意: 如果感觉下载有点慢的话,可以使用添加国内镜像源来实现下载

ini 复制代码
# 第一种:临时使用镜像源
uv add [依赖名称] --default-index https://pypi.tuna.tsinghua.edu.cn/simple
# 第二种:项目使用镜像源 ,在pyproject.toml文件里增加
[[tool.uv.index]]
url="https://pypi.tuna.tsinghua.edu.cn/simple"
default=true
# 第三种:全局环境变量
export UV_DEFAULT_INDEX="https://pypi.tuna.tsinghua.edu.cn/simple"
  1. 运行项目/python文件

在完成项目的编写和依赖添加后,需要运行项目

arduino 复制代码
# 运行python文件
uv run python main.py

如果项目结构是下面这个标准的话,可以通过运行模块的形式运行

css 复制代码
myproject/
├── pyproject.toml
└── src/
    └── myproject/
        ├── __init__.py
        └── cli.py

uv run python -m [项目名称]
  1. 激活虚拟环境

在项目中有了.venv虚拟环境后,我们执行以下几个命令,uv都会自动检测使用项目根目录下的.venv

arduino 复制代码
uv run python main.py
uv add requests
uv sync

注意:当我们在控制台执行python,pip等相关命令的时候,可能用的是系统的python而不是我们刚刚创建的虚拟环境,所以我们需要切换到这个虚拟环境中

bash 复制代码
source .venv/bin/activate

所以最后还是系统推荐直接使用uv的相关命令,不建议通过手动激活来交互python等命令信息

退出环境/不需要

在前面有了激活环境后,如果需要退出环境,可以执行deactivate

复制代码
deactivate

当你不想要这个项目时,可以直接通过删除该项目文件夹即可,因为所有的依赖,配置都在这个项目配置文件中

uv最佳实践

第一种: 通过自己手动创建文件夹,然后进入文件夹中,通过指定创建python版本的虚拟环境

bash 复制代码
mkdir python-project
cd python-project
uv venv --python 3.11 .venv
uv add ..... # 添加一些依赖
uv run python main.py 

第二种: 通过命令创建项目文件夹,然后进入文件夹中,你再通过运行/添加依赖的时候自动触发安装项目中的适合的python版本(.python-version文件和pyproject.tomlrequires-python参数判断)的虚拟环境

csharp 复制代码
uv init py-test
cd py-test
uv venv .venv # 或后面两步的 uv add/run 自动创建
uv add ....  
uv run python main.py

总结

日常使用,我大多就直接用uv,安装速度很快体积也小,兼容pypi生态,除了在使用科学计算的情况下/非python依赖的系统级库才使用conda

相关推荐
这里有鱼汤4 小时前
📊量化实战篇:如何计算RSI指标的“拥挤度指标”?
后端·python
魔术师卡颂4 小时前
不就写提示词?提示词工程为啥是工程?
前端·人工智能·后端
程序员清风4 小时前
快手二面:乐观锁是怎么用它来处理多线程问题的?
java·后端·面试
IT_陈寒4 小时前
《Redis性能翻倍的7个冷门技巧,90%开发者都不知道!》
前端·人工智能·后端
一线大码4 小时前
SpringBoot 优雅实现接口的多实现类方式
java·spring boot·后端
PFinal社区_南丞5 小时前
构建可维护的正则表达式系统-pfinal-regex-center设计与实现
后端·php
Imnobody5 小时前
吴恩达 Prompt 工程课精讲②:写出高可靠 Prompt 的2大黄金法则
后端
yuuki2332335 小时前
【C语言】程序的编译和链接(基础向)
c语言·后端
梅小西爱学习5 小时前
线上CPU飙到100%?别慌,这3个工具比top快10倍!
java·后端·cpu