在 Python 开发中,虚拟环境(Virtual Environment)是一种工具,用于创建独立的 Python 执行环境。它允许不同的专案使用不同版本的 Python 解释器和依赖套件,而不会相互干扰。

虚拟环境的作用

  • 依赖隔离:避免不同专案的依赖发生冲突。例如,webCrawler网页专案 使用 Django 2.2,而机器学习专案需要 Django 3.0,可以使用虚拟环境让两者共存。
  • 便于测试:在不同环境中测试应用程式,例如测试不同版本的依赖套件对应用程式的影响。
  • 跨环境兼容:本地开发环境与伺服器部署环境保持一致,减少部署问题。

虚拟环境的工作原理

虚拟环境是透过拷贝或模拟一个独立的 Python 解释器及其 site-packages(套件存放目录)来运行的。当虚拟环境被激活时,该环境的 Python 解释器会覆盖系统全域的 Python,从而执行该虚拟环境内的程式和安装的套件。

如何建立虚拟环境: Anaconda Navigator & pip3

Anaconda Navigator 建立虚拟环境的特点

  • 图形介面操作:适合对命令行不熟悉的使用者。
  • 依赖管理:Conda 作为套件管理器,专为科学计算优化,能自动解决依赖冲突。
  • 更多预设套件:Anaconda 自带的环境会包含数十种常用的数据科学相关工具,如 NumPy、Pandas、Jupyter Notebook 等。
  • 多语言支持:除了 Python,也支持 R 等其他语言的环境管理。

如何使用 Anaconda Navigator 建立虚拟环境

  • 开启 Anaconda Navigator在你的操作系统中搜寻并启动 Anaconda Navigator。

  • 建立新环境在左侧菜单选择 "Environments"。点击右下角的 "Create" 按钮。输入虚拟环境的名称,例如 myenv。选择需要的 Python 版本(例如 Python 3.8 或 3.10)。点击 "Create",Anaconda 会自动设置好新的虚拟环境。

  • 安装所需套件选择刚刚建立的环境,点击 "Not Installed" 筛选出尚未安装的套件。搜寻需要的套件(如 numpy, pandas 等),点击前方的方框选取,然后点击 "Apply"。

  • 启用虚拟环境在 Anaconda Navigator 中,选择环境后,可以直接开启应用程式,如 python、 Jupyter Notebook、Spyder 等。如果使用命令行启用:conda activate webCrawler

  • 这时候,命令行提示符会变成 (webCrawler),表示你已经进入了 webCrawler 虚拟环境。

    查看当前虚拟环境

    conda info --envs这会列出所有已经创建的虚拟环境,并显示当前启动的虚拟环境。如果虚拟环境正在启动,会在当前环境名称旁边显示 *。

    ❯ conda info --envs

    # conda environments:
    #
    base /opt/anaconda3
    webCrawler * /opt/anaconda3/envs/webCrawler
    website /opt/anaconda3/envs/website

    在上面的例子中,webCrawler 环境是当前启动的环境,因为它旁边有 *

    检查虚拟环境中的 Python 路径

    which python例如,当你启动名为 webCrawler 的虚拟环境后,which python 应该会返回类似下面的路径:

    /opt/anaconda3/envs/webCrawler/bin/python

    如果环境已经启动,这时候你应该看到指向虚拟环境中的 Python 路径,而不是指向 Anaconda 的全域安装。

    安装套件

    conda install numpy

    查看已安装的套件

    conda list

    这会列出当前虚拟环境中安装的所有套件。如果你看到的套件列表跟全域的套件不同,那么表示你确实在虚拟环境中。

    退出虚拟环境

    conda deactivate

    删除虚拟环境

    如果你不再需要 website 这个环境并且想要删除它,可以按照以下步骤操作:conda env remove --name website

    确认删除成功

    conda info --envs

    删除虚拟环境 website 中的 pandas 包

    如果你只想删除虚拟环境 website 中的 pandas 包,而不是删除整个环境,可以使用以下命令来移除 pandas:步骤:1.激活 website 环境:首先,你需要激活 website 环境,这样你才能对其中的包进行操作。conda activate website

    2.卸载 pandas 包:在激活环境后,你可以使用 conda remove 命令来卸载 pandas 包。conda remove pandas

    这个命令会将 pandas 从当前激活的环境中移除。

    确认是否成功移除

    你可以使用以下命令来确认 pandas 是否已经被成功移除:conda list

    这会显示目前环境中已安装的所有包。检查列表中是否还有 pandas,如果已经没有,则表示成功卸载

    补充:如果使用 pip 安装过 pandas,可以使用 pip uninstall:pip uninstall pandas如果你是在 website 环境中使用 pip 安装了 pandas,则需要使用 pip 命令来卸载它

    使用 venv(内建模组,Python 3.3+)

    # 创建虚拟环境
    python3 -m venv myenv

    # 激活虚拟环境
    # Linux / MacOS
    source myenv/bin/activate

    # Windows
    myenv\\Scripts\\activate

    # 停用虚拟环境
    deactivate

    虚拟环境中的操作

    • 在虚拟环境内安装套件:

    pip install package_name

    套件将只安装到该虚拟环境中,而不会影响全域环境。

    • 查看虚拟环境中的已安装套件:pip list

    • 虚拟环境的档案结构假设虚拟环境名称为 myenv,结构可能如下:

    myenv/
    ├── bin/ # 虚拟环境的执行档,例如 python, pip(Linux / MacOS)
    ├── Scripts/ # 虚拟环境的执行档(Windows)
    ├── lib/ # 虚拟环境的 Python 标準库及依赖套件
    ├── include/ # C/C++ 标头档案
    ├── pyvenv.cfg # 虚拟环境的设定档

    Anaconda 与 venv/virtualenv 的比较

    pip 和 conda 的差异在于,pip 会直接装最新的;conda 会选择相容性最高的版本安装,而且在安装之前会把要变更的东西都列出来,你确认之后他才会执行。

    特性
    Anaconda 虚拟环境
    venv/virtualenv
    操作方式 图形界面或 Conda 命令行管理 主要依赖命令行操作
    预设套件 包含多种科学计算工具 仅包含基础 Python 套件
    套件管理 使用 Conda,专为数据科学设计 使用 pip,通用的 Python 套件管理
    依赖解决 Conda 更智能,解决依赖冲突较容易 pip 有时会遇到版本或依赖冲突
    支援的语言 Python、R、Julia 等 仅支持 Python
    灵活性 内置功能丰富,但相对封闭 灵活通用,可与其他工具搭配使用
    适用场景 数据科学、机器学习 通用 Python 开发

    在 VS Code 中使用 Conda 虚拟环境

  • 启动 VS Code打开你的 .py 文件所在的目录。

  • 选择 Conda 环境作为解释器

    • 点击 VS Code 窗口底部的 Python: Select Interpreter(或者按 Ctrl+Shift+P 打开命令面板,输入 Python: Select Interpreter)。
    • 在弹出的选单中,找到你创建的虚拟环境名称(例如 myenv)。
      • 如果看不到,请先启动终端执行 conda activate myenv,然后重新打开选单。
      • 如果还是看不到,可以手动添加环境(见下方)。
  • 手动添加环境(若需要)

    • 确认你的环境位于以下路径(根据系统不同):
      • Windows: C:\\Users<你的用户名>\\Anaconda3\\envs\\myenv\\python.exe
      • macOS/Linux: /Users/<你的用户名>/anaconda3/envs/myenv/bin/python
    • 选择「Enter interpreter path」,然后选择上述路径。
  • 检查虚拟环境

    • 打开 VS Code 的终端(快捷键 Ctrl+ 或 Ctrl+Shift+),确认虚拟环境名称已经出现在终端提示符中(例如 (myenv))。
    • 如果没有,手动输入 conda activate myenv 激活。
  • 编写并运行代码现在,你在 VS Code 中撰写和运行 .py 文件时,会使用 myenv 中的 Python 解释器和相关套件。