Ubuntu Python虚拟环境创建与管理:venv与conda实战指南
2026/8/24 3:15:02 网站建设 项目流程

1. 项目概述:为什么我们需要虚拟环境?

在Ubuntu上折腾项目,尤其是Python项目,相信不少朋友都踩过同一个坑:系统里装了一堆不同版本的库,A项目需要numpy==1.21,B项目却要求numpy==1.24,最后版本冲突搞得焦头烂额,甚至把系统自带的Python环境搞崩。虚拟环境(Virtual Environment)就是为解决这个问题而生的“隔离舱”。它允许你为每个项目创建一个独立的Python运行环境,在这个环境里安装的包、配置的路径都只对当前项目生效,不同项目之间互不干扰。这就像给每个项目分配了一个专属的、干净的房间,你在房间里怎么折腾,都不会影响到客厅(系统环境)和其他房间(其他项目)。

对于在Ubuntu上进行开发、数据科学、机器学习或者运维部署的朋友来说,掌握虚拟环境的创建和使用是必备技能。无论是从GitHub拉取一个开源项目来运行,还是自己开发一个应用,第一步往往就是搭建一个专属的虚拟环境。这不仅能保证项目依赖的纯净和可复现性,也极大地简化了后续的部署和迁移流程。今天,我就以一个资深开发者的视角,带你从零开始,在Ubuntu上完成创建虚拟环境、安装项目依赖、并成功运行项目的完整闭环。我们会聚焦于最通用、最轻量的venv模块,同时也会对比介绍conda等工具,让你知其然更知其所以然。

2. 核心工具选型:venv vs conda vs 其他

在Ubuntu上创建Python虚拟环境,主流工具有两个:Python标准库自带的venv和第三方发行版Anaconda/Miniconda附带的conda。选择哪个,取决于你的具体场景。

2.1 Python venv:轻量、标准、推荐

venv是Python 3.3+版本内置的模块,无需额外安装(只要你的Python3是从官方源安装的)。它的最大优点是轻量标准。创建的环境只包含最基本的Python解释器和pip,非常干净。它通过修改环境变量PATH,将当前环境的pythonpip命令指向隔离目录,从而实现环境隔离。

适用场景

  • 纯粹的Python项目开发。
  • 项目依赖主要通过pip从PyPI安装。
  • 追求环境最小化,部署到生产服务器。
  • 你希望使用系统包管理器(如apt)管理非Python依赖(如数据库客户端、系统库)。

注意venv创建的环境是“软链接”到系统Python解释器的,它并不复制一份完整的Python。这意味着如果你升级了系统的Python,虚拟环境可能受到影响。最佳实践是为每个项目固定Python版本。

2.2 Conda:跨语言、强大的包管理

Conda本身是一个独立的开源包管理和环境管理系统,它不仅可以管理Python包,还能管理R、C/C++、Java等多种语言的包,甚至能安装非Python的二进制工具。它通过创建完全独立的目录树来实现环境隔离,环境之间更加彻底。

适用场景

  • 数据科学、机器学习项目,经常需要复杂的数据栈(如NumPy, SciPy, Pandas, TensorFlow, PyTorch)。
  • 项目依赖包含大量需要编译的C扩展库,conda提供了预编译好的二进制包,避免复杂的编译环境配置。
  • 需要方便地安装和管理非Python依赖,比如ffmpegcuda工具包等。
  • 在Windows系统上,conda是管理科学计算环境的利器。

一个常见问题的解答:在搜索热词中看到“conda创建新虚拟环境显示the channel is not accessible”。这通常是因为.condarc配置文件中的镜像源地址失效或网络问题。解决方法通常是更换为国内的镜像源(如清华、中科大源),或者检查网络连接。

我们的选择:对于大多数通用的Python Web开发、脚本编写、自动化任务,venv因其简单、标准而足够好用。本文将主要使用venv进行演示,并在关键步骤指出与conda的异同。

3. 实操准备:Ubuntu系统与Python基础配置

在开始创建环境之前,我们需要确保系统处于一个良好的起点。这里假设你使用的是Ubuntu 22.04 LTS或20.04 LTS,这是目前最稳定的两个长期支持版本。

3.1 确保Python3与pip可用

首先,打开你的终端(Ctrl+Alt+T)。Ubuntu 22.04默认已经安装了Python 3.10。我们可以通过以下命令确认:

python3 --version pip3 --version

如果pip3提示未安装,可以使用Ubuntu的包管理器apt来安装:

sudo apt update sudo apt install python3-pip -y

实操心得:始终使用python3pip3命令来明确指定使用的是Python 3。虽然有些教程会教你通过update-alternativespython命令链接到python3,但在生产服务器或需要严格版本控制的场景下,保持明确性可以避免很多潜在的混淆和错误。

3.2 升级pip至最新版本

系统自带的pip版本可能较旧。使用最新版的pip可以确保包安装过程更稳定,支持更多新特性。

pip3 install --upgrade pip

升级后,可以通过pip --version(注意,升级后通常可以直接使用pip命令)来确认版本。

4. 核心环节一:使用venv创建虚拟环境

现在,进入我们项目的核心目录。假设你的项目名为my_awesome_project,位于家目录下。

cd ~ mkdir my_awesome_project && cd my_awesome_project

4.1 创建虚拟环境

在当前目录下,执行创建虚拟环境的命令:

python3 -m venv venv

这条命令的含义是:调用Python 3的venv模块,在当前目录(.)下创建一个名为venv的虚拟环境目录。你也可以取其他名字,比如.venvenv等,但venv是社区常见的约定。

命令执行后,你会看到当前目录下多了一个名为venv的文件夹。它的内部结构大致如下:

venv/ ├── bin/ # 存放可执行文件,如python, pip, activate脚本 ├── include/ # C头文件 ├── lib/ # 所有安装的Python包都在这里的site-packages下 └── pyvenv.cfg # 环境配置文件

4.2 激活虚拟环境

创建环境后,它只是一个孤立的目录。我们需要“激活”它,让当前的终端会话知道,后续所有的pythonpip命令都应该指向这个隔离环境。

source venv/bin/activate

激活成功后,你的命令行提示符(PS1)通常会发生变化,最前面会显示虚拟环境的名称(venv),如下所示:

(venv) user@host:~/my_awesome_project$

现在,你可以验证一下Python和pip的路径:

which python which pip

输出应该指向~/my_awesome_project/venv/bin/下的文件,而不是/usr/bin/

重要注意事项:激活操作只对当前这个终端标签页或会话有效。如果你新开一个终端标签页,需要重新进入项目目录并再次执行source venv/bin/activate。当你完成工作,想退出虚拟环境时,只需输入命令deactivate,提示符就会恢复原样。

4.3 使用conda创建环境(备选方案)

如果你选择使用conda,步骤有所不同。首先你需要安装Miniconda或Anaconda。以Miniconda为例,从官网下载安装脚本后:

bash Miniconda3-latest-Linux-x86_64.sh # 安装后,重启终端或运行 `source ~/.bashrc`

创建环境的命令是:

conda create --name my_env python=3.9 # 创建一个名为my_env,Python版本为3.9的环境 conda activate my_env # 激活环境 conda deactivate # 退出环境

conda的环境默认安装在~/miniconda3/envs/目录下,与项目目录分离。这对于管理多个使用相同Python版本但不同包的项目可能不够直观,但便于集中管理所有环境。

5. 核心环节二:在虚拟环境中安装项目依赖

环境激活后,我们就进入了这个干净的“房间”。接下来,就要根据项目的需要,在这个房间里布置家具——安装Python包。

5.1 理解依赖管理文件:requirements.txt

一个规范的项目,通常会包含一个requirements.txt文件,它列出了项目运行所需的所有第三方包及其精确版本。例如:

Django==4.2.7 requests>=2.28.0,<3.0.0 pandas numpy==1.24.3
  • ==:指定精确版本。
  • >=:指定最低版本。
  • <:指定最高版本(不包含)。
  • 只写包名:安装最新稳定版。

5.2 安装依赖

假设你的项目目录下已经有requirements.txt文件,安装命令非常简单:

(venv) pip install -r requirements.txt

pip会自动从PyPI(Python包索引)下载并安装所有列出的包及其依赖项。安装过程中,你会看到大量的下载和安装日志。

如果没有requirements.txt文件怎么办?

  1. 手动安装:如果你知道项目需要哪些包,可以逐个安装:pip install django requests pandas
  2. 生成requirements.txt:如果你是在一个已有的、能运行的项目中,但缺少依赖声明文件,可以在虚拟环境中安装好所有必需的包后,运行以下命令生成它:
    (venv) pip freeze > requirements.txt
    pip freeze会列出当前环境中所有已安装的包及其版本,输出重定向到文件就生成了requirements.txt务必在虚拟环境中执行此操作,否则会导出系统全局的所有包!

5.3 使用国内镜像源加速下载

直接从PyPI下载可能会很慢。我们可以使用国内的镜像源来大幅提升下载速度。在安装时通过-i参数指定镜像源:

(venv) pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

常用的国内镜像源有:

  • 清华:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里云:https://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/

如果你想设置为默认,可以创建或修改~/.pip/pip.conf文件(Linux/macOS)或%APPDATA%\pip\pip.ini(Windows):

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

5.4 安装特定版本的Python包

有时项目需要特定版本的包,或者你需要降级/升级某个包。使用pip install指定版本即可:

(venv) pip install pandas==1.5.3 # 安装精确版本 (venv) pip install --upgrade pandas # 升级到最新版本 (venv) pip install pandas~=1.5.0 # 安装兼容版本,相当于>=1.5.0, <1.6.0

6. 核心环节三:运行你的项目

依赖安装完毕,虚拟环境已经准备就绪,是时候让项目跑起来了。运行项目的具体命令因项目类型而异。

6.1 运行Python脚本

对于单个的Python脚本文件(例如main.pyapp.py),直接使用虚拟环境中的Python解释器运行即可:

(venv) python main.py

6.2 运行Django项目

典型的Django项目会有一个manage.py文件作为入口。

  1. 首先,确保已安装Django(通常在requirements.txt中已包含)。
  2. 应用数据库迁移(如果项目使用数据库):
    (venv) python manage.py migrate
  3. 创建超级用户(如果需要后台管理):
    (venv) python manage.py createsuperuser
  4. 启动开发服务器
    (venv) python manage.py runserver
    默认情况下,服务器会运行在http://127.0.0.1:8000。在浏览器中访问这个地址,你应该能看到Django的欢迎页面或你的应用。

6.3 运行Flask项目

Flask项目通常有一个主应用文件,例如app.pyrun.py

  1. 设置Flask应用入口(如果需要):
    (venv) export FLASK_APP=app.py # 对于Windows CMD: set FLASK_APP=app.py # 对于Windows PowerShell: $env:FLASK_APP="app.py"
  2. 启动开发服务器
    (venv) flask run # 或者 python app.py (如果app.py中直接调用了app.run())
    服务器通常运行在http://127.0.0.1:5000

6.4 运行从GitHub克隆的项目

这是搜索热词中的高频需求:“github上的项目怎么运行”、“从github下载项目并运行”。通用步骤如下:

  1. 克隆项目
    git clone https://github.com/username/repo.git cd repo
  2. 查看项目说明务必首先阅读README.md文件!作者通常会在里面写明安装和运行步骤、依赖的Python版本、是否需要特殊配置等。
  3. 创建并激活虚拟环境(如前所述)。
  4. 安装依赖:按照README.md的指示,可能是pip install -r requirements.txt,也可能是pip install -e .(以可编辑模式安装当前目录的包)或使用poetry/pipenv等更现代的依赖管理工具。
  5. 环境变量与配置:很多项目需要配置环境变量(如数据库连接字符串、API密钥)。通常会有.env.exampleconfig.example.py文件,你需要复制一份并填入自己的配置。
  6. 初始化数据库:对于Web项目,可能需要运行迁移脚本。
  7. 运行项目:根据README.md的启动命令执行。

7. 虚拟环境的管理与维护

虚拟环境不是创建一次就一劳永逸的,我们需要知道如何管理它们。

7.1 查看已安装的包

(venv) pip list # 列出所有已安装的包及其版本 (venv) pip show package_name # 查看某个特定包的详细信息

7.2 更新包

更新所有包到符合版本约束的最新版(谨慎操作,可能破坏兼容性):

(venv) pip list --outdated # 先查看哪些包有更新 (venv) pip install --upgrade package_name # 更新单个包

更安全的方式是定期根据更新的requirements.txt重新安装。

7.3 卸载包

(venv) pip uninstall package_name

7.4 删除虚拟环境

当你确定某个项目环境不再需要时,直接删除其目录即可。首先确保你已经退出了该虚拟环境(deactivate

deactivate # 如果环境处于激活状态,先退出 rm -rf venv/ # 删除名为venv的虚拟环境目录

对于conda环境,使用conda remove --name my_env --all

7.5 虚拟环境的迁移与复现

虚拟环境本身(venv文件夹)不建议直接复制到其他机器,因为其中包含的路径可能是硬编码的。正确的做法是:

  1. 在源环境中生成精确的依赖列表:pip freeze > requirements.txt
  2. 将项目代码和requirements.txt文件传到新机器。
  3. 在新机器上创建新的虚拟环境,并运行pip install -r requirements.txt

这保证了环境的高度可复现性。对于更复杂的依赖和环境管理,可以考虑使用Docker容器化技术。

8. 常见问题与排查技巧实录

在实际操作中,你几乎一定会遇到一些问题。下面是我总结的一些高频问题及其解决方案。

8.1 创建虚拟环境失败

  • 问题Command 'python3' not foundThe virtual environment was not created successfully...
  • 排查
    1. 确认Python3已安装:python3 --version
    2. 确保安装了python3-venv包(某些最小化安装的Ubuntu可能没有):sudo apt install python3-venv
    3. 检查目标目录的写入权限。

8.2 激活脚本执行报错

  • 问题source venv/bin/activate后提示Permission denied或脚本错误。
  • 排查
    1. 检查激活脚本是否存在:ls -la venv/bin/activate
    2. 可能是文件格式问题(如在Windows创建,在Linux使用)。可以尝试用dos2unix工具转换:dos2unix venv/bin/activate
    3. 确保你使用的是bashzsh等兼容shell,而不是fishcsh(它们有自己对应的激活脚本,位于venv/bin/activate.fish)。

8.3 安装包时速度慢或超时

  • 问题pip install卡在下载阶段或报超时错误。
  • 解决
    1. 首要方案:使用国内镜像源,如前文所述。
    2. 增加超时时间:pip install --default-timeout=100 package_name
    3. 检查网络连接,特别是如果使用了代理,需要为pip配置代理:pip install --proxy=http://user:pass@proxy-server:port package_name

8.4 包版本冲突

  • 问题pip在安装时提示无法满足所有包的版本要求,例如Cannot install package-a==1.0 because package-b requires package-a>=2.0
  • 解决
    1. 这是依赖管理的核心难题。首先尝试安装主要的核心包(如Django, Flask),让pip自动协调依赖。
    2. 如果不行,查看错误信息,尝试手动安装一个兼容的版本组合。有时需要稍微降低或提高某个核心包的版本。
    3. 使用pip check命令来检查已安装包之间的依赖兼容性。
    4. 考虑使用更先进的依赖解析工具,如pip-tools(pip-compile/pip-sync) 或poetry

8.5 运行项目时提示模块未找到(ModuleNotFoundError)

  • 问题python app.py报错ModuleNotFoundError: No module named 'xxx'
  • 排查
    1. 首先确认虚拟环境是否已激活!这是最常见的原因。检查命令行提示符是否有(venv)前缀。
    2. 确认该模块是否已安装:pip list | grep xxx
    3. 如果模块已安装但依然报错,可能是Python路径问题。确保你的项目目录结构正确,或者尝试使用PYTHONPATH环境变量:PYTHONPATH=/path/to/your/project python app.py

8.6 Conda环境相关错误

  • 问题conda create失败,提示The channel is not accessiblePackagesNotFoundError
  • 解决
    1. 配置国内镜像源。执行以下命令添加清华源:
      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
    2. 清除索引缓存:conda clean -i
    3. 指定更宽泛的包版本,或者从其他渠道(如conda-forge)寻找包:conda install -c conda-forge package_name

9. 进阶技巧与最佳实践

掌握了基础操作后,下面这些技巧能让你的虚拟环境使用体验更上一层楼。

9.1 使用 .venv 作为环境目录名

越来越多的工具(如Python的venv模块本身、一些IDE)开始默认寻找或推荐使用.venv作为虚拟环境目录名。它是一个隐藏文件夹,可以让项目根目录更整洁,并且被许多.gitignore模板默认忽略,避免误提交。

python3 -m venv .venv source .venv/bin/activate

9.2 将虚拟环境目录排除在版本控制之外

虚拟环境目录(venv/.venv/绝对不应该提交到Git等版本控制系统。确保你的.gitignore文件包含如下行:

# Virtual Environment venv/ .venv/ env/

9.3 使用 pipreqs 智能生成 requirements.txt

pip freeze会导出环境中的所有包,包括你不需要的间接依赖。pipreqs工具可以只扫描项目代码中import的语句,生成最小化的依赖列表,更干净。

# 首先在虚拟环境中安装 pip install pipreqs # 然后在项目根目录运行 pipreqs . --encoding=utf8 --force

9.4 为不同Python版本创建环境

有时你需要测试项目在不同Python版本下的兼容性。可以使用deadsnakesPPA(适用于Ubuntu)安装多个Python版本,然后用指定版本创建虚拟环境:

# 添加deadsnakes PPA并安装Python 3.11 sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.11 python3.11-venv # 使用Python 3.11创建虚拟环境 python3.11 -m venv venv-311

9.5 在Shell配置中简化激活流程

如果你经常在几个项目间切换,可以在~/.bashrc~/.zshrc中添加别名或函数来快速激活环境。例如,添加一个函数:

function act() { if [ -d ".venv" ]; then source .venv/bin/activate elif [ -d "venv" ]; then source venv/bin/activate else echo "未找到虚拟环境目录 (.venv 或 venv)。" fi }

保存后执行source ~/.bashrc,以后进入项目目录,只需输入act即可尝试激活虚拟环境。

虚拟环境是Python开发者的基石工具,它代表的是一种清晰、隔离、可复现的项目管理哲学。从今天起,养成“每个项目,先建环境”的习惯,你会发现项目依赖管理带来的烦恼将大大减少。无论是运行一个从GitHub上发现的有趣脚本,还是部署一个复杂的企业级应用,这套流程都能为你提供一个坚实可靠的起点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询