python 虚拟环境操作

Python virtualenv 打造干净的开发环境

作为开发者,我们经常需要在不同项目间切换,而不同项目可能依赖不同版本的 Python 库,甚至不同版本的 Python 解释器。virtualenv 就是解决这个问题的利器——它能为每个项目创建独立的虚拟环境,避免依赖冲突。这篇笔记整理了 virtualenv 的核心用法,方便日常速查。

一、什么是 virtualenv?

virtualenv 是一个 Python 工具,用于创建隔离的虚拟环境。每个虚拟环境都有自己的 Python 解释器和独立的依赖库目录,不同环境间的依赖互不干扰。

核心作用

  • 避免全局环境被各种项目依赖污染
  • 解决“项目A需要库1.0,项目B需要库2.0”的冲突问题
  • 方便项目依赖的移植和共享

二、安装 virtualenv

首先需要在全局环境安装 virtualenv(仅需一次):

# 使用 pip 安装
pip install virtualenv

# 若系统同时有 Python2 和 Python3,指定 Python3 的 pip
pip3 install virtualenv

验证安装是否成功:

virtualenv --version  # 输出版本号即安装成功

三、基本使用流程

1. 创建虚拟环境

进入项目目录,执行以下命令创建虚拟环境(默认使用当前系统的 Python 版本):

# 在当前目录创建名为 venv 的虚拟环境(推荐用 venv 作为目录名,方便识别)
virtualenv venv

自定义参数

  • 指定 Python 版本(需系统已安装对应版本):
    virtualenv -p /usr/bin/python3.9 venv  # 使用 Python3.9
    virtualenv -p /usr/bin/python2.7 venv  # 使用 Python2.7
    
  • 创建不含全局 site-packages 的环境(完全隔离):
    virtualenv --no-site-packages venv
    

2. 激活虚拟环境

创建后需要激活环境才能使用(不同操作系统激活命令不同):

  • Windows 系统(cmd 终端)
    venv\Scripts\activate.bat
    
  • Windows 系统(PowerShell)
    .\venv\Scripts\Activate.ps1
    
  • Mac/Linux 系统(bash/zsh)
    source venv/bin/activate
    

激活成功后,终端提示符前会显示 (venv),表示当前处于虚拟环境中。

3. 在虚拟环境中工作

激活后,所有 pythonpip 命令都会指向当前虚拟环境:

# 安装依赖(仅在当前环境生效)
pip install requests==2.25.1  # 安装指定版本
pip install -r requirements.txt  # 从文件安装依赖

# 查看当前环境的依赖
pip list
pip freeze  # 更简洁的依赖列表(常用于导出)

4. 导出依赖列表

项目开发完成后,导出当前环境的依赖,方便他人复现:

pip freeze > requirements.txt  # 将依赖写入文件

生成的 requirements.txt 可提交到代码仓库,他人拿到后只需在自己的虚拟环境中执行:

pip install -r requirements.txt  # 安装所有依赖

5. 退出虚拟环境

完成工作后,退出虚拟环境:

deactivate

退出后,终端提示符前的 (venv) 消失,pythonpip 回到全局环境。

6. 删除虚拟环境

若需删除虚拟环境,直接删除对应的目录即可(无需额外命令):

# Mac/Linux
rm -rf venv

# Windows
rmdir /s /q venv

四、常见问题与技巧

  1. 忘记激活环境?
    若直接在全局环境安装依赖,可删除全局安装的包(pip uninstall 包名),激活虚拟环境后重新安装。

  2. 虚拟环境路径问题?
    虚拟环境目录(如 venv)应加入 .gitignore,避免提交到代码仓库(只需共享 requirements.txt)。

  3. 更便捷的工具?
    virtualenv 的增强版 virtualenvwrapper 可简化环境管理(如无需记路径,用 workon 环境名 切换),感兴趣可自行了解。

  4. Python3.3+ 内置替代方案?
    Python3.3 以上自带 venv 模块(python -m venv venv),用法与 virtualenv 类似,可根据需求选择。

五、速查命令表

操作 命令(Mac/Linux) 命令(Windows cmd)
安装 virtualenv pip3 install virtualenv pip install virtualenv
创建环境 virtualenv venv virtualenv venv
激活环境 source venv/bin/activate venv\Scripts\activate.bat
安装依赖 pip install 包名 pip install 包名
导出依赖 pip freeze > requirements.txt pip freeze > requirements.txt
安装导出的依赖 pip install -r requirements.txt pip install -r requirements.txt
退出环境 deactivate deactivate
删除环境 rm -rf venv rmdir /s /q venv

通过 virtualenv 管理项目环境,能让开发更规范、减少依赖冲突。

延伸:跨平台一键进入虚拟环境并运行 main.py 的方案

在开发中,每次启动项目都要手动激活虚拟环境再执行脚本,略显繁琐。下面提供 Windows、Mac、Linux 平台的「一键启动」方案,用一条命令或一个脚本搞定激活环境 + 运行程序的流程。

一、Windows 平台:使用批处理脚本(.bat)

1. 适用场景

  • 虚拟环境目录为项目根目录下的 venv
  • 脚本文件为项目根目录下的 main.py

2. 实现步骤

在项目根目录创建 start.bat 文件,写入以下内容:

@echo off
:: 检查虚拟环境是否存在
if not exist "venv\Scripts\python.exe" (
    echo 错误:未找到虚拟环境,请先创建 venv
    pause
    exit /b 1
)

:: 检查 main.py 是否存在
if not exist "main.py" (
    echo 错误:未找到 main.py
    pause
    exit /b 1
)

:: 激活虚拟环境并运行脚本
echo 正在激活虚拟环境...
call venv\Scripts\activate.bat

echo 正在运行 main.py...
python main.py

:: 运行结束后保持窗口(可选,按任意键关闭)
echo 程序运行结束
pause

3. 使用方法

双击 start.bat 即可自动激活环境并运行 main.py,运行结束后窗口会停留(按任意键关闭)。

二、Mac/Linux 平台:使用 Shell 脚本(.sh)

1. 实现步骤

在项目根目录创建 start.sh 文件,写入以下内容:

#!/bin/bash

# 检查虚拟环境是否存在
if [ ! -f "venv/bin/python" ]; then
    echo "错误:未找到虚拟环境,请先创建 venv"
    exit 1
fi

# 检查 main.py 是否存在
if [ ! -f "main.py" ]; then
    echo "错误:未找到 main.py"
    exit 1
fi

# 激活虚拟环境并运行脚本
echo "正在激活虚拟环境..."
source venv/bin/activate

echo "正在运行 main.py..."
python main.py

# 运行结束后退出环境(可选)
deactivate
echo "程序运行结束"

2. 赋予执行权限

首次使用前需要给脚本加权限:

chmod +x start.sh

3. 使用方法

在终端中执行:

./start.sh

三、跨平台通用:使用 Python 脚本自动判断环境

如果需要一个脚本适配所有系统,可以用 Python 自身判断操作系统,自动执行对应命令:

在项目根目录创建 run.py,写入以下内容:

import os
import sys
import subprocess

# 虚拟环境目录和目标脚本
VENV_DIR = "venv"
TARGET_SCRIPT = "main.py"

def main():
    # 检查目标脚本是否存在
    if not os.path.exists(TARGET_SCRIPT):
        print(f"错误:未找到 {TARGET_SCRIPT}")
        sys.exit(1)

    # 根据系统选择激活命令和 Python 路径
    if sys.platform.startswith("win"):
        # Windows 系统
        python_path = os.path.join(VENV_DIR, "Scripts", "python.exe")
        activate_cmd = os.path.join(VENV_DIR, "Scripts", "activate.bat")
    else:
        # Mac/Linux 系统
        python_path = os.path.join(VENV_DIR, "bin", "python")
        activate_cmd = f"source {os.path.join(VENV_DIR, 'bin', 'activate')}"

    # 检查虚拟环境是否存在
    if not os.path.exists(python_path):
        print(f"错误:未找到虚拟环境,请先创建 {VENV_DIR}")
        sys.exit(1)

    # 构造命令(先激活环境,再运行脚本)
    if sys.platform.startswith("win"):
        # Windows 用 cmd 执行
        cmd = f'cmd /k "{activate_cmd} && python {TARGET_SCRIPT} && pause"'
    else:
        # Mac/Linux 用 bash 执行
        cmd = f'bash -c "{activate_cmd} && python {TARGET_SCRIPT}"'

    # 执行命令
    subprocess.run(cmd, shell=True)

if __name__ == "__main__":
    main()

使用方法

直接在项目根目录运行(无需提前激活环境):

# Windows
python run.py

# Mac/Linux
python3 run.py

四、进阶技巧:添加到系统 PATH(快速启动)

如果需要在任意目录通过命令启动项目,可将项目目录添加到系统 PATH,再配合脚本使用:

  1. Windows

    • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
    • 在「系统变量」的 PATH 中添加项目根目录路径
    • 之后在任意 cmd 窗口输入 start.bat 即可启动
  2. Mac/Linux

    • 编辑 ~/.bashrc~/.zshrc,添加:
      export PATH="$PATH:/path/to/your/project"
      
    • 生效配置:source ~/.bashrc(或对应配置文件)
    • 之后在任意终端输入 start.sh 即可启动

通过以上方案,可大幅简化日常启动项目的操作,尤其适合频繁切换项目的场景。根据自己的系统选择对应方案即可~

posted @ 2021-06-27 23:33  Dapenson  阅读(220)  评论(0)    收藏  举报