02 Anaconda、Python 与机器学习开发环境入门

前言

上一篇我们用一个线性回归案例认识了机器学习的基本流程。代码本身并不长,但要让它真正运行起来,电脑还需要合适的 Python、NumPy 和 scikit-learn。很多初学者遇到的第一个困难并不是算法,而是"明明安装过,为什么还是提示找不到""终端能运行,PyCharm 却报错"。

这些问题通常与 Python 环境有关。环境决定了程序使用哪个 Python 解释器、能够导入哪些库,以及这些库分别是什么版本。先理解环境管理,后面学习 NumPy、Pandas 和各种模型时,排错会轻松许多。

为什么机器学习需要独立环境

一个 Python 项目不只包含自己写的代码,还会依赖许多第三方库。数据处理可能使用 NumPy 和 Pandas,训练模型可能使用 scikit-learn,绘图可能使用 Matplotlib。它们彼此之间也有版本要求。

首先,不同项目可能要求不同的 Python 版本。一个旧项目也许只能在 Python 3.9 下正常运行,新项目则可能使用 Python 3.11 才支持的语法。如果电脑里只有一个全局 Python,升级后旧项目可能无法启动,停留在旧版本又会限制新项目。

其次,库也会发生版本冲突。假设项目 A 依赖某个库的 1.x 版本,项目 B 需要 2.x 版本,把两套依赖都装进同一个环境,后一次安装可能替换前一次的版本。结果是项目 B 能运行了,项目 A 却突然报错。

还有一种常见情况:为了尝试教程不断安装新包。时间久了,环境里混入大量与当前项目无关的依赖。即使程序今天能运行,也很难说清它究竟依赖什么,换一台电脑时便不容易复现。

因此,不建议把所有内容都安装到同一个环境。更稳妥的做法是让不同项目使用相互隔离的环境,并记录关键依赖版本。环境并不能消除所有兼容性问题,但能把问题限制在一个项目内,避免一次升级影响整台电脑上的全部代码。

Python、Conda、Anaconda 分别是什么

这三个名称经常同时出现,但它们不是同一种东西。

Python 是一种编程语言。我们编写的 .py 文件由 Python 解释器读取并执行。解释器可以理解为真正负责运行 Python 代码的程序;同一台电脑上可以同时存在多个版本的解释器。

Conda 是环境管理和包管理工具。它可以创建相互独立的环境,为每个环境选择 Python 版本,还能安装、更新和移除软件包。Conda 不只管理 Python 包,也能管理一些非 Python 依赖。

Anaconda 是面向科学计算和数据分析的集成发行版。安装 Anaconda 后,通常会得到 Python、Conda、基础环境以及一批常用工具和库。它像一套已经配好的工具箱,而 Conda 是工具箱中负责管理环境和包的重要工具。

所以三者的关系可以概括为:我们用 Python 编写和运行程序,用 Conda 管理不同的 Python 环境与依赖;Anaconda 则把 Python、Conda 和常用科学计算工具打包在一起,降低初次配置成本。安装 Anaconda 不等于只能使用它自带的基础环境,我们仍然可以通过 Conda 为不同项目创建新环境。

什么是虚拟环境

虚拟环境(Virtual Environment)是一组相对独立的运行配置。它通常拥有自己的 Python 解释器和第三方库目录。激活某个环境后,终端中的 pythonpipconda 命令会优先指向该环境对应的位置。

环境隔离解决的是"项目之间不要互相干扰"。例如,房价预测项目可以使用 Python 3.11 和新版 scikit-learn,另一个需要维护的旧项目可以保留 Python 3.9 和旧版依赖。两者各自运行,不必反复卸载和重装。

"一个项目一个环境"不是绝对规则,但很适合作为入门习惯。课程中的几个简单脚本可以共用一个学习环境;当项目的依赖、用途或版本要求明显不同时,再为它建立独立环境。

虚拟环境也是复现实验的重要基础。只保存代码还不够,如果没有记录 Python 和库版本,其他人可能无法得到相同结果。后续可以使用 conda env export 或维护 requirements.txt 记录依赖。环境文件不保证跨平台完全一致,但比"在我电脑上可以运行"更容易检查和复现。

安装 Anaconda 后的基本操作

在 Windows 上可以打开 Anaconda Prompt;如果 PowerShell 已完成 Conda 初始化,也可以直接在 PowerShell 中执行这些命令。

查看已有环境:

复制代码
conda env list

输出中会列出环境名称和所在路径,名称旁边的星号表示当前激活的环境。排查问题时,先运行这条命令,确认自己到底在哪个环境中。

创建名为 ml、使用 Python 3.11 的环境:

复制代码
conda create -n ml python=3.11

-n ml 指定环境名,python=3.11 指定 Python 主次版本。执行前应看清待安装的软件包和目标路径,再确认操作。

激活环境:

复制代码
conda activate ml

激活后,命令行提示符通常会出现 (ml)。此时运行 python 或安装包,目标应当是 ml 环境。环境名出现在提示符中只是线索,仍可用 python -c "import sys; print(sys.executable)" 核对解释器路径。

退出当前环境:

复制代码
conda deactivate

这条命令会返回上一层环境或未激活状态,不会删除环境及其中的文件。

删除不再需要的环境:

复制代码
conda remove -n ml --all

--all 表示删除该环境的全部内容。这是不可逆的清理操作,必须先确认环境名正确,并确保项目代码和需要保留的数据不在环境目录中。正在使用的环境应先退出,再考虑删除。

创建第一个机器学习环境

下面以 ml_demo 为例。先创建环境并指定 Python 3.11:

复制代码
conda create -n ml_demo python=3.11
conda activate ml_demo

激活后安装本系列前几篇会用到的库:

复制代码
conda install numpy pandas scikit-learn matplotlib

这四个库的分工不同:NumPy 提供数组和数值计算能力;Pandas 用于读取、整理和分析表格数据;scikit-learn 提供常用机器学习算法、数据拆分工具和评估指标;Matplotlib 用于绘制数据和结果图表。

把这些包写在同一条安装命令中,Conda 会尝试为它们寻找一组相互兼容的版本。安装完成后,不要只看"成功"提示,还应在该环境中实际导入一次。本文后面的检测程序就是为此准备的。

如果电脑上已经有满足项目要求的环境,不必为了名字一致而重复创建。环境名只是标识,真正需要核对的是解释器路径、Python 版本和依赖版本。本篇代码验证使用现有的 base 环境,没有新建或升级环境。

Python 解释器是什么

Python 解释器是执行代码的程序文件。在 Windows 的 Conda 环境中,它通常位于类似 Anaconda安装目录\envs\环境名\python.exe 的位置;基础环境的路径则通常直接位于 Anaconda 安装目录下。

IDE(集成开发环境)只是帮助我们编辑和运行代码的工具。PyCharm 中的 Python Interpreter 设置,决定点击"运行"时调用哪个解释器;VS Code 中的"Python: Select Interpreter"也在做同样的选择。终端已经激活 ml_demo,并不一定代表 IDE 当前项目自动选择了它。

解释器选错时,最典型的现象是:在 Anaconda Prompt 中可以 import pandas,在 PyCharm 或 VS Code 中却出现 ModuleNotFoundError。包可能安装得完全正确,只是安装在环境 A,而 IDE 使用的是环境 B。

遇到这种情况,先让程序打印 sys.executable,再与 IDE 显示的解释器路径、终端中的 where python 结果比较。三者指向同一环境后,再继续检查包版本,比反复安装依赖更有效。

第一个环境检测程序

将下面代码保存为 02_environment_check.py。程序不访问网络,只读取当前解释器和已安装包的信息;如果 Python 版本过低、包缺失或导入过程损坏,会输出明确错误并以非零状态结束。

复制代码
"""检查当前 Python 解释器和机器学习入门依赖。"""

from __future__ import annotations

import importlib
import sys


PACKAGES = (
    ("NumPy", "numpy"),
    ("Pandas", "pandas"),
    ("Scikit-learn", "sklearn"),
)


def read_package_versions() -> dict[str, str]:
    """导入所需包并返回版本;失败时给出容易理解的错误。"""
    versions: dict[str, str] = {}

    for display_name, import_name in PACKAGES:
        try:
            module = importlib.import_module(import_name)
        except ModuleNotFoundError as exc:
            raise RuntimeError(
                f"缺少 {display_name}:当前解释器无法导入 {import_name!r}。"
            ) from exc
        except Exception as exc:
            raise RuntimeError(
                f"{display_name} 已被找到,但导入失败:{exc}"
            ) from exc

        version = getattr(module, "__version__", None)
        if not version:
            raise RuntimeError(f"无法读取 {display_name} 的版本号。")
        versions[display_name] = str(version)

    return versions


def main() -> None:
    """输出 Python、直接依赖和当前解释器信息。"""
    if sys.version_info < (3, 8):
        raise RuntimeError("本示例需要 Python 3.8 或更高版本。")

    versions = read_package_versions()

    print(f"Python: {sys.version.split()[0]}")
    print(f"NumPy: {versions['NumPy']}")
    print(f"Pandas: {versions['Pandas']}")
    print(f"Scikit-learn: {versions['Scikit-learn']}")
    print(f"Interpreter: {sys.executable}")


if __name__ == "__main__":
    try:
        main()
    except RuntimeError as exc:
        print(f"环境检查失败:{exc}", file=sys.stderr)
        sys.exit(1)

在项目根目录运行:

复制代码
python 02_environment_check.py

本文已在现有 Conda base 环境中实际运行,程序正常结束,输出如下:

复制代码
Python: 3.11.4
NumPy: 1.24.3
Pandas: 1.5.3
Scikit-learn: 1.3.0
Interpreter: C:\Users\32981\anaconda3\python.exe

版本号不是越新越好,在此仅作示例。更重要的是:程序使用的解释器确实属于预期环境,所需库能够成功导入,项目也记录了自己验证过的版本范围。

常见环境问题

1. ModuleNotFoundError

它表示当前解释器没有找到要导入的模块。先确认模块的安装名和导入名,例如安装使用 scikit-learn,代码使用 import sklearn。然后核对 sys.executable,在同一解释器对应的环境中安装缺少的包,不要急着在多个终端重复安装。

2. 安装成功但是无法 import

最常见的原因是安装命令和运行命令属于不同环境。可以分别执行 python -m pip --versionpython -c "import sys; print(sys.executable)" 查看路径。若路径一致仍失败,再检查错误信息中是否出现动态库缺失、版本不兼容或同名本地文件遮蔽。例如,项目中自己创建了 pandas.py,就可能干扰真正的 Pandas 导入。

3. PyCharm 运行环境错误

打开项目设置中的 Python Interpreter,确认所选路径属于项目计划使用的 Conda 环境。修改解释器后重新运行检测程序,不要仅凭状态栏名称判断。运行配置也可能单独指定解释器,因此还要检查具体脚本的 Run Configuration。

4. CUDA 环境混乱

CUDA 是 NVIDIA 提供的并行计算平台,深度学习常用它调用显卡。CUDA 驱动、工具包、深度学习框架及其编译版本之间存在兼容关系。初学传统机器学习时通常不需要先配置 CUDA;NumPy、Pandas 和多数 scikit-learn 入门示例使用 CPU 就能完成。以后确实需要 GPU 时,应按照所用框架的官方兼容说明建立单独环境,不要随意混装多个 CUDA 版本。

5. 不同项目为什么不要共用环境

共用环境看似节省空间,却会扩大改动范围。项目 A 升级一个底层库,项目 B 可能在没有修改代码的情况下失效。独立环境让升级、回退和删除都有明确边界,也方便用环境配置文件交接。对于长期项目,这点比少占用一些磁盘空间更重要。

总结

Python 是编写和运行程序的语言与解释器;Conda 负责管理环境和包;Anaconda 提供了包含 Python、Conda 与科学计算工具的集成发行版。虚拟环境把不同项目的解释器和依赖隔离开,是控制版本冲突、定位导入错误和复现实验的重要基础。

开始一个机器学习项目时,可以养成三个习惯:确认当前环境,核对解释器路径,记录依赖版本。遇到导入错误时,也按这个顺序检查,而不是立即升级所有软件。

下一篇预告

下一篇是《NumPy 入门:机器学习中的数组和矩阵》。我们会从数组的形状、索引和常用计算开始,理解机器学习代码为什么经常把数据组织成二维矩阵。

相关推荐
2401_868534781 小时前
RTOS之RT-Thread & Linux:线程/进程管理与调度核心差异分析
c++·python
数字化转型分享点滴2 小时前
富士康、蓝思科技为何选择四化信息?MES制造执行系统的实践
python·科技
wling03012 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
魔镜前的帅比2 小时前
(开源项目)x-claw(总)
python·ai·rust·开源
xrandzj3 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
matlabgoodboy6 小时前
计算机毕设代做|Java Python Matlab APP 全套开发设计
java·python·课程设计
用户8356290780516 小时前
Python Word 转 PDF 和 PDF 转 Word 指南
后端·python
用户8356290780516 小时前
如何使用 Python 加密和保护 Word 文档
后端·python
Fluxproxy6 小时前
AI数据集采集、批量模型推理报错频发?AI项目网络稳定性优化实战
python·ai·ai编程