您现在的位置是:网站首页> PY&Rust

Python虚拟环境的搭建与使用

  • PY&Rust
  • 2025-05-01
  • 1104人已阅读
摘要

Python虚拟环境的搭建与使用

Python命令行创建使用虚拟环境

Python 用virtualenv创建的虚拟环境与用 conda创建的虚拟环境有啥不同

miniconda使用

virtualenv创建虚拟环境

conda创建虚拟环境

PyCharm运行python时提示无法加载文件xxx\.venv\Scripts\activate.ps1

Python 虚拟环境工具对比:venv、conda、和 uv



Python命令行创建使用虚拟环境

1.创建虚拟环境

python -m venv venv

2.激活虚拟环境

.\venv\Scripts\activate

3.安装依赖:

.\venv\Scripts\pip.exe install -r .\requirements.txt


有时出现创建虚拟环境失败:pip install --upgrade setuptools


Python 用virtualenv创建的虚拟环境与用 conda创建的虚拟环境有啥不同

Python 的虚拟环境是用于在同一台计算机上隔离不同项目的工具。虚拟环境可以创建一个独立的 Python 运行环境,使得每个项目可以使用不同的 Python 版本、依赖库和配置。

虽然 virtualenv 和 conda 都用于创建虚拟环境,但它们有一些不同之处:


创建方式: 创建 virtualenv 环境需要首先安装 virtualenv 工具,然后使用命令行命令创建环境。而 conda 是 Anaconda 发行版中的一个包管理器,可以直接使用 conda 命令创建和管理环境。

依赖管理: virtualenv 使用 pip 作为主要的包管理工具,可以通过 pip 安装 Python 包。conda 则使用自己的包管理系统,可以安装来自 Anaconda 仓库的包,并且可以处理 C/C++ 等非 Python 包的依赖关系。

跨平台性: virtualenv 是 Python 自带的工具,因此可以在各种操作系统上运行。conda 则是 Anaconda 发行版的一部分,它提供了跨平台的功能,并且可以管理不仅限于 Python 的软件包和依赖关系。

环境隔离: 虚拟环境的隔离程度稍有不同。virtualenv 使用的是隔离 Python 解释器和包的方法,而 conda 能够隔离整个环境,包括 Python 解释器和其他系统级的依赖项。

生态系统: Anaconda 发行版提供了大量的数据科学和机器学习相关的包和工具,这些包在创建 conda 虚拟环境时更容易安装和管理。而 virtualenv 则更适合通用的 Python 环境的创建和管理。


综上所述,选择使用 virtualenv 还是 conda 创建虚拟环境主要取决于具体的需求和场景。如果你只需要简单地隔离 Python 环境并安装 Python 包,virtualenv 可能是一个较轻量级的选择。如果你需要管理更复杂的环境、处理非 Python 包的依赖关系或者使用 Anaconda 生态系统的功能,那么 conda 可能更适合你的需求。



miniconda使用

点击查看原文

一、下载Miniconda

根据自己的需求下载Anaconda或者Miniconda

我这里选择轻量化的Miniconda。


二、安装Miniconda

根据安装程序提示,一直点击下一步即可。


三、在系统环境变量中添加PATH

否则无法在终端直接调用Conda命令。

C:\Users\用户名\miniconda3

C:\Users\用户名\miniconda3\Scripts

C:\Users\用户名\miniconda3\Library\bin


四、初始化Powershell

Conda init powershell ## 根据终端名称进行初始化

# Currently supported shells are:

# - bash

# - cmd.exe

# - fish

# - tcsh

# - xonsh

# - zsh

# - powershell


五、重新打开Powershell如果报错

以管理员身份运行Powershell

set-executionpolicy remotesigned ## 回复 Y


六、取消Conda初始化(base)环境

如果不想每次打开Powershell都进入Conda的(base)环境,执行下面命令取消自动激活。

最后一个参数设置为True即可恢复。

conda config --set auto_activate_base False


七、更改镜像源

网络原因需要设置国内的镜像源,安装提速,我这里提供清华镜像源设置方法。

方法很多种,只提供下列一种方法。

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/cloud/pytorch/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

conda config --set show_channel_urls yes


八、Conda基本的使用

参数说明

-n, --name 表示名称

--clone 复制一个存在的虚拟环境

1. 查看当前所有虚拟环境

conda env list

# or

conda info -e

2. 创建虚拟环境

conda create -n (ENV_NAME) [Python=3.9]

3. 激活虚拟环境

conda activate (ENV_NAME)

4. 退出虚拟环境

conda deactivate

5. 删除某个虚拟环境

conda remove -n (ENV_NAME) --all

6. 克隆虚拟环境

conda create -n (ENV_NAME_OLD) --clone (ENV_NAME_NEW)





virtualenv创建虚拟环境

1.安装虚拟环境

pip install virtualenv


2.创建虚拟环境(进入项目目录执行)

virtualenv -p 指定版本解释器位置 虚环名 

# eg

virtualenv -p C:\Python36\python.exe my_env

如自己电脑命令:

virtualenv -p C:\Users\xn\AppData\Local\Programs\Python\Python39\python.exe myenv


也可以用当前版本创建 python -m venv my_env



3. 进入虚拟环境

(1) Windows系统

① 操作

进入虚环文件夹 → Scripts文件夹

② 执行

activate


4. 退出虚拟环境

deactivate


可直接在项目目录直接执行

my_env\scripts\activate

特别注意添加 virtualenv的路径否则出现不是内部命令错误

环境变量Path里添加如:c:\users\xn\appdata\local\packages\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\localcache\local-packages\python311\scripts\



conda创建虚拟环境

下载和安装Anaconda或Miniconda

当使用 Conda 进行命令行操作时,可以使用以下一些常见的命令和选项来创建和管理虚拟环境、安装和更新包,以及管理环境和包的依赖关系。


1. 创建和管理虚拟环境:


创建新的虚拟环境:

conda create --name <env_name>

```


指定 Python 版本创建虚拟环境:

conda create --name <env_name> python=<python_version>

```


激活虚拟环境:

conda activate <env_name>

```


停用当前虚拟环境:

conda deactivate

```


查看已创建的虚拟环境:

conda env list

```


删除虚拟环境:

conda env remove --name <env_name>

```

2. 安装和更新包:


安装包:

conda install <package_name>

```


安装指定版本的包:

conda install <package_name>=<version>

```


更新包:

conda update <package_name>

```


删除包:

conda remove <package_name>

```

3. 管理环境和包的依赖关系:


导出环境依赖关系到文件:

conda env export > environment.yml

```


从环境依赖关系文件创建环境:

conda env create --file environment.yml

```


查看包的依赖关系:

conda info <package_name>

```


查看环境的依赖关系:

conda list

```


搜索可用的包:

conda search <package_name>

```


清理不再需要的包和缓存:

conda clean --all

```

这只是一些常见的 Conda 命令和选项示例。Conda 提供了更多的功能和选项,你可以使用 conda --help 命令获取完整的帮助文档,或者查阅 Conda 的官方文档以获得更详细的使用说明。


PyCharm运行python时提示无法加载文件xxx\.venv\Scripts\activate.ps1

解决办法

第一步:以管理员身份运行powershell

第二步:执行:get-ExecutionPolicy 回复Restricted,表示状态是禁止的。

第三步:执行:set-ExecutionPolicy RemoteSigned

第四步:选择Y,回车



Python 虚拟环境工具对比:venv、conda、和 uv


venv

最朴素的环境隔离方式Python 自带的 venv,其实已经能满足不少轻量项目的需求,特别是我最开始写脚本、做简单工具的时候,它就足够用了。 比如在嵌入式开发中,ESP32 的 IDF SDK 就是基于 venv 来做环境隔离的。你可以同时装多个不同版本的开发框架,互不影响。 用法非常简单:

# 创建虚拟环境

python -m venv venv

# 激活环境(Linux / macOS)

source venv/bin/activate

# Windows:

venv\Scripts\activate

# 退出环境

deactivate

它的优点是:  python自带,非常轻量 同时这也是它的缺点: 依赖于某个python版本。当你的工程不支持这个版本时,就又要一番折腾。  


miniconda

AI领域更方便后来,我开始涉及机器学习、LLM 等方向(是的,我不仅仅只做嵌入式),python版本经常要换,venv 就有点跟不上了。于是我转向了 miniconda。conda create -n myenv python=3.10

conda activate myenvMiniconda 是 Anaconda 的轻量版,没有默认装一堆科学包。我更喜欢它干净、可控,再按需装库。它的优点是: 解决了venv中python版本的问题。 管理的不只是 Python 包,还能管理 Python 本身和系统级依赖(如 C 库、R 语言)。 适用于科学计算、数据分析领域。圈子里的README都推荐用它。 但它也有缺点: 创建和激活环境速度较慢。 当做了一堆项目,创建了一堆环境后,记忆会很痛苦。 会改写 .bashrc 自动加载 base 环境,有时会导致莫名其妙的问题。(比如不小心就pip install了啥,强迫症也见不得命令行前面加一个符号)


⚡️uv

现代感爆棚的 Python 包管理工具从 2024 年底我开始尝试使用 uv,现在我所有的新项目都迁移到了它上面。它像是 nodejs的 npm,或者 Rust 的 cargo,在很多方面都碾压传统方案。

两种使用方式传统方式(兼容 venv)

uv venv myenv --python=3.10

source myenv/bin/activate

uv pip install numpy

这就像是 venv + pip 的加速版,适合脚本或已有项目。


推荐方式:project 模式(类似nodejs 的 npm)

uv init             # 初始化项目(生成 pyproject.toml)

uv add numpy        # 安装依赖并自动写入配置文件

uv run main.py      # 自动激活环境 + 运行代码

执行 uv run 时,uv 会自动创建 .venv 文件夹,读取 pyproject.toml 和 uv.lock,同步依赖并运行程序。 

你甚至可以:uv add -r requirements.txt  # 从传统依赖列表迁移

这种模式,完美的和现有的工程进行融合。从创建到最后的build都包含了。

除了project外,也提供了tool 的方式,让我们在安装和运行命令行程序时,做到较好的隔离。比如 uv tool install --python 3.12 pdf2zh 就可以一键安装pdf的翻译工具。独立的依赖,不会因为我电脑上的环境导致问题。

为什么我喜欢它?

快! 使用rust编写,安装依赖是并行的,比 pip 和 conda 都快;

现代! 项目结构清晰,依赖写在 pyproject.toml ,最后锁定在lock文件中;

轻! 删除 .venv 文件夹就等于删掉环境;

干净! 不污染系统,不自动写配置,不乱改 .bashrc;


三者对比分析

特性venvConda (Miniconda)uv (推荐 project 模式)
是否内置✅ 是❌(需安装)❌(需安装)
安装方式Python 自带官网下载安装(推荐 Miniconda)pip install uv
环境创建速度✅ 快❌ 慢超快(并行)
占用空间✅ 小❌ 大✅ 小
依赖管理手动 requirements.txtconda + pip✅ pyproject.toml + uv.lock
项目初始化❌ 无❌ 无✅ uv init 一键结构化
源支持使用 pip 镜像使用 Conda 自有源使用 pip 镜像
非 Python 包支持✅(如 cudatoolkit)
适合场景脚本 / 嵌入式工具链数据科学 / 科研项目所有项目,特别是现代开发

迁移到 uv 的原因:

1. 速度不是快一点,是快几倍

uv 本身是用 Rust 写的,所有 pip 安装的操作都会并行处理,特别是当依赖比较多时,体验是断崖式领先。

pip 是串行安装,uv 是并发安装,差距非常明显。 比如我有一个项目依赖 30 多个库,用 pip 安装需要 1-2 分钟,用 uv 10 秒内就搞定

2. 项目就是环境,结构天然清晰

uv 的推荐模式是以项目为中心的,类似 npm 的体验:

uv init
uv add flask
uv run app.py

一切都写在 pyproject.toml,你不再需要手动维护 requirements.txt,也不需要关心激活哪个环境、有没有冲突 —— 因为环境就是项目自己管理的 .venv 文件夹。 更棒的是,你只要把项目文件夹打包发给别人,对方:

git clone ...
uv sync

就能 100% 还原运行环境。这比 pip + venv 要靠谱太多了。

3. 从“工具链散装”到“一条龙集成”

传统 Python 开发中,你可能要用这些工具配合:

  • venv 创建环境
  • pip 装包
  • requirements.txt 管依赖
  • 手动处理依赖冲突
  • virtualenvwrapper 管多项目
  • pip-tools 锁依赖

uv 把这些功能都整合成一体,统一通过 pyproject.toml + uv.lock 管理。 这种集中式管理方式极大提升了我开发的专注度:我不再分神在环境配置上,只专注写业务逻辑。

4. 删除项目=删除环境,干净利落

用 Conda 时,我经常忘了删不用的环境,堆了一堆 base, env-1, env-2… 用 venv 时,不小心激活了错的环境,程序就会报奇怪的错。 而 uv 把虚拟环境放在 .venv,你只要:

rm -rf .venv

就彻底清掉这个环境,没有任何污染,不动系统,不乱写配置文件。

5. 工具链现代化,更适合团队和持续集成

uv 对 pyproject.toml 的支持非常好,意味着你可以和:

  • ruff, black, pytest, mypy
  • pre-commit, poetry, setuptools

这些现代工具配合使用,统一配置、统一管理,为团队协作和 CI/CD 提供天然支持



























上一篇:Python项目实操笔记

下一篇:Python技巧

Top