简介:这份资源面向刚开始接触 Python 数据分析与深度学习环境搭建的初学者及自学者,针对环境中工具分散、库安装困难、IDE 与解释器对接混乱等问题,提供从 Anaconda 安装、安装验证,到 OpenCV、TensorFlow、Keras 等科学计算库安装,再到 PyCharm 部署与编译器配置的一整套流程说明。压缩包内为 1 个 docx 文档,约 4.22MB,以图文混排方式记录关键界面与命令行输出,便于对照操作。资源已有 6954 人学习下载,说明其在环境配置类内容中具备一定的参考价值。文档中不仅给出 pip 安装与清华镜像加速的具体写法,还说明了 conda list 自检方法、版本号指定方式,以及在 PyCharm 中通过 Project Interpreter 添加 anaconda3 环境下 python.exe 的完整路径与操作细节,可帮助读者少走弯路,快速完成可用的 TensorFlow、Keras 与 OpenCV 开发环境搭建。
1. 解释器指错,库装得再全也白搭:Anaconda + PyCharm 这套配置到底在解决什么
Anaconda 装完、TensorFlow 也 pip 装上了,PyCharm 里一运行还是ModuleNotFoundError,这种场面在编译器配置这一步出现的频率,远高于“库真的没装上”。库安装这件事拆开只有三问:用哪个解释器、用哪个包管理器、装进哪个环境;PyCharm 的解释器配置就是回答第一问。三步里任何一步错位,报错都是同一句话——找不到模块,看起来像没装,实际是装到别的地方去了。
这份教程覆盖的就是这条最小闭环:装 Anaconda、用conda list确认装成功、用pip install 库名 -i 镜像补 OpenCV/TensorFlow/Keras、装 PyCharm、把解释器指到 Anaconda 目录下的python.exe。适合刚配深度学习环境、被“装了却 import 不到”折腾过一轮的人,也适合要把实验环境固化下来复现结果的从业者。
2. 装完 Anaconda 先别急着写代码:三个验证动作定生死
安装包双击、下一步、等进度条,这一步几乎没有技术含量,真正决定后面顺不顺的是安装向导最后那两三个勾选框,以及装完之后你用什么方式确认它真的可用了。很多人卡在“明明装完了,命令行里敲 conda 提示不是内部或外部命令”,本质是 PATH 没配或者终端没刷新,跟装没装成功是两回事。
2.1 最后一个页面的勾选框:Add to PATH 到底勾不勾
安装向导末尾通常会出现两个勾选项:一个是安装完成后打开介绍页面/教程页,勾了会拉起浏览器;另一个是Add Anaconda3 to my PATH environment variable,官方默认不勾,并且会附一句红字警告。原文的做法是两个都取消,这个选择对新手是安全的,但要知道代价。
- 不勾 PATH:
conda、python这些命令只在 Anaconda Prompt 这个专用终端里有效,系统 CMD 和 PowerShell 里敲不出来。好处是不会顶掉机器上已有的 Python,不会影响别的软件调用系统 Python。 - 勾了 PATH:任何终端都能直接敲
conda,但 Anaconda 的路径会排到系统 Python 前面,机器上如果还有别的工具链依赖特定 Python 版本,容易出玄学问题。
我一般会走第一条路,然后在需要的地方显式用 Anaconda Prompt,或者在 PyCharm 里直接指绝对路径的python.exe。如果你的机器是干净的、只跑这一个技术栈,勾上也行,但记住以后排查问题的第一句话永远是“现在这个终端用的是哪个 python”。
另外提醒一点:安装路径不要带中文、不要带空格、不要放在需要管理员权限才能写的目录(比如C:\Program Files)。这不是 Anaconda 一家的毛病,pip 解包、conda 建环境、编译扩展时都可能因为路径里的空格或权限失败,且报错信息通常完全不指向真正原因。
2.2 用 conda list 验证:输出里的四列分别是什么
从开始菜单找到 Anaconda3 文件夹,打开 Anaconda Prompt,敲:
# 列出当前环境里所有已安装的包,能打印出内容就说明 conda 本体可用 conda list正常输出是四列:Name(包名)、Version(版本号)、Build(构建标识,含 Python 版本和编译器信息)、Channel(来源仓库)。能刷出几十上百行,说明 conda 环境本身是好的——这比“安装成功”的弹窗可靠得多,弹窗只代表安装器退出码为 0,不代表包索引可用。
如果这一步报“conda 不是内部或外部命令”,先别重装,按顺序查三件事:
# 1. 看 conda 的安装信息:base environment 路径、python 版本、平台 conda info # 2. 看当前终端实际调用的是哪个 python,Windows 用 where,macOS/Linux 用 which where python # 3. 直接问解释器自己:它认为自己的可执行文件在哪 python -c "import sys; print(sys.executable)"conda info里重点看base environment那一行的路径是不是你安装时选的目录,以及python version是否符合预期。where python会按 PATH 顺序列出所有命中项,第一条就是当前生效的那个——如果第一条指向C:\Users\xxx\AppData\Local\Programs\Python\Python39\python.exe而不是 Anaconda 目录,那你后面所有pip install都装到系统 Python 里去了,这就是后面第 5 章要展开的经典翻车点。
sys.executable这条命令看着简单,实际是排查环境问题最高性价比的一招:不管 IDE、终端、Jupyter 还是别人的脚本,只要能让它跑一行代码,就能问出它到底用的是哪个解释器。
2.3 base 环境不要当垃圾场:先建独立环境再装库
装完就往 base 里堆 TensorFlow、Keras、OpenCV,是所有新手教程的通病,也是后期最难收拾的局面。base 环境里有一堆 conda 自带的依赖(比如特定版本的 numpy、protobuf),你pip install一个老版本深度学习框架,pip 为了满足依赖会把 numpy 降级,降完之后 conda 自己的某些工具就坏了,报错指向一个你从没碰过的包。
正确姿势是一开始就分环境。TensorFlow 1.x 这类老框架对 Python 版本卡得很死,更要单独开一个:
# 建一个名为 py37 的环境,指定 Python 3.7(TensorFlow 1.13.x 支持的版本区间) conda create -n py37 python=3.7 -y # 激活它,后续所有 pip/conda 安装都只影响这个环境 conda activate py37 # 确认激活生效:输出的路径应该包含 envs\py37 python -c "import sys; print(sys.executable)"-n py37是环境名,随便起,但建议带上版本号方便识别;python=3.7是版本约束,conda 会去仓库里找满足约束的最新 3.7.x;-y跳过确认。激活后命令行提示符前面会出现(py37),这是最直观的环境标识,看不到这个前缀就说明没激活成功,后面装什么都白搭。
建环境这一步多花两分钟,换来的是后面出问题时可以一句conda env remove -n py37推倒重来,而不是在 base 里跟几十个互相冲突的依赖搏斗。血泪经验:能重建的环境才叫环境,不能重建的只能叫遗产。
3. 库安装:pip 与 conda 的分工、镜像源和版本锁
装库这块最容易出现的误解是“pip 和 conda 随便用哪个都行”。两者管的层次不一样,混用会导致依赖树被悄悄改写;另一个高频问题是下载慢、超时,加不加镜像源差别是十分钟和十秒钟的区别。这一章把这三件事拆开讲清楚:谁装什么、从哪下、装哪个版本。
3.1 pip 和 conda 的边界:什么时候用哪个
| 维度 | pip | conda |
|---|---|---|
| 包来源 | PyPI | Anaconda 官方仓库、conda-forge 等 |
| 依赖解析范围 | 只处理 Python 层依赖 | Python 包 + 非 Python 二进制依赖(如 MKL、编译好的 CUDA 运行库) |
| 目标环境 | 装进当前激活环境的 site-packages | 可用-n 环境名直接指定,不必先激活 |
| 优势场景 | 新包、小众包、框架官方推荐 pip 安装的包 | 科学计算栈、需要预编译二进制的包 |
| 典型风险 | 覆盖 conda 装好的二进制包,导致底层库版本错配 | 仓库里没有最新版,或某些包只有 pip 版本 |
原文全程用 pip,这对 TensorFlow、Keras、opencv-python 这三个包是对的——它们的官方安装指引优先 pip,conda 仓库里的版本往往滞后。但要记住一条铁律:同一个环境里,不要用 pip 去覆盖一个已经由 conda 安装的包。判断方法很简单,装之前先查:
# 查某个包是 conda 装的还是 pip 装的;Channel 列显示 pypi 的就是 pip 装的 conda list numpy # 只列 pip 安装的包,用来确认环境里有没有 pip 留下的“历史遗留” pip list如果conda list numpy的 Channel 列是空的或显示defaults/conda-forge,说明这个 numpy 是 conda 装的,此时再pip install numpy==某版本就会把它替换掉,conda 记录的依赖关系随即失真。真需要降级,优先conda install numpy=1.16,让 conda 自己算依赖。
3.2 镜像源:临时 -i 与永久配置两种写法
原文用的是临时指定:pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple。-i是--index-url的缩写,作用是把本次安装的包索引地址换成镜像站,请求走镜像、不走 PyPI 官方源。这个写法适合一次性安装,缺点是每条命令都得带。
# 临时指定镜像源安装 OpenCV 的 Python 绑定 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple # 装指定版本:用 == 锁死版本号,避免装到不兼容的新版 pip install tensorflow==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple第一条命令里opencv-python是包名,注意它和import cv2的名字不一致,这是新手最常困惑的点之一;第二条里tensorflow==1.13.1的==是精确匹配,用>=会装到最新版,行为差异巨大。镜像地址只是加速手段,不影响包的完整性校验,但如果你在内网或对来源有要求,换成单位内网源即可。
要长期用,就把它写成配置,之后所有 pip 命令自动走镜像:
# 写入用户级 pip 配置;Windows 落在 %APPDATA%\pip\pip.ini,Linux/macOS 落在 ~/.config/pip/pip.conf pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 顺便把超时时间调大,大包(如 tensorflow)在内网环境下容易卡在最后几 MB pip config set global.timeout 120 # 验证配置是否写入成功 pip config listglobal.index-url影响当前用户的所有 pip 调用,优先级低于命令行-i,所以临时命令依然可以覆盖它。global.timeout单位是秒,默认 15 秒,装几百 MB 的框架时经常不够。测试连通性可以用pip install --dry-run或者干脆装一个小包试试。
3.3 版本锁定:tensorflow==1.13.1 背后的兼容矩阵
原教程明确给了tensorflow==1.13.1,这个版本不是随便挑的:TensorFlow 1.13 系列官方支持 Python 3.5–3.7,装在 3.8 及以上会直接报找不到匹配的发行版(wheel),或者更糟——装上了但 import 时报 DLL 加载失败。所以版本锁定的第一层不是框架本身,而是 Python 解释器版本,这就是 2.3 节要先建py37环境的原因。
第二层是框架的间接依赖。这类老框架对 numpy、protobuf、h5py 的版本区间很窄,而 pip 默认会拉最新版,装完 import 时抛一堆FutureWarning甚至AttributeError。稳妥做法是先钉住几个关键依赖,再装框架:
# 先钉 numpy 到 1.x 的老版本区间,避免 pip 拉最新的 2.x 导致二进制接口不兼容 pip install "numpy<1.17" -i https://pypi.tuna.tsinghua.edu.cn/simple # 再装框架本体,此时 pip 会复用已装好的 numpy,不会二次覆盖 pip install tensorflow==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple # Keras 作为高层 API,版本要和 TensorFlow 对齐;2.2.4 对应 TF 1.13 系列 pip install keras==2.2.4 -i https://pypi.tuna.tsinghua.edu.cn/simple"numpy<1.17"加引号是为了防止 shell 把<当成重定向符号,Windows CMD 下尤其要注意。Keras 版本和 TensorFlow 版本有对应关系,混搭会出现AttributeError: module 'tensorflow' has no attribute ...这类看着莫名其妙的报错,装之前查一下官方兼容表比出事后再查省时间。
如果是全新项目、不依赖老代码,那就别碰 1.x,直接上新版本,Python 3.10/3.11 配当前稳定版 TensorFlow,省掉一大半兼容性折腾。版本锁定的意义是复现,不是越老越好。
3.4 装完必须验:import 一行比 Successfully installed 可靠
Successfully installed只代表 wheel 解包完成,不代表能 import。二进制包(OpenCV、TensorFlow 都算)在 import 时才真正加载动态库,缺 DLL、ABI 不匹配、依赖版本冲突全在这一刻暴露。所以每装完一个包,立刻验一次:
# 逐个验证并打印版本号;能打印出版本号,才算真装好 python -c "import cv2; print('opencv', cv2.__version__)" python -c "import tensorflow as tf; print('tf', tf.__version__)" python -c "import keras; print('keras', keras.__version__)" # 确认这三个包都落在当前激活环境的 site-packages 里,而不是系统 Python pip show opencv-python tensorflow keraspip show的输出里有两个字段值得盯:Version和Location。Location应该指向...\envs\py37\Lib\site-packages,如果指向了C:\Users\...\AppData\Roaming\Python或别的路径,说明虽然 import 成功但装错了地方,换环境后会立刻失效。
import tensorflow的输出里如果夹着大量FutureWarning、DeprecationWarning,通常不影响使用,但出现DLL load failed或ImportError: cannot import name ...就是真问题,往下看第 5 章。
4. PyCharm 里指定解释器:从 Settings 到 python.exe 的完整路径
PyCharm 安装本身没什么可讲的,一路默认、最后点 Finish 就行,首次启动的初始化配置(主题、插件推荐)按提示走完。真正决定能不能干活的是下一步:把项目解释器指到 Anaconda 环境里的python.exe。没配之前,PyCharm 用的是它自己或者系统里的 Python,你在 Anaconda 里装的几十个库它一个都看不见。
4.1 三层界面结构:Project Interpreter、Show All、Add
打开File → Settings(macOS 是PyCharm → Preferences),左侧找到Project: 项目名 → Python Interpreter。这个页面分三块:上方是当前解释器的路径下拉框,中间是已安装包的列表,右侧有齿轮图标和+号。原教程描述的“点齿轮 → Show All → 点 + 号”就是这里。
为什么要绕一圈 Show All?因为在多环境场景下,下拉框里往往已经列了一堆历史解释器,直接点+添加的可能是“新建虚拟环境”而不是“使用已有环境”。走 Show All 能看清当前项目已经关联了哪些解释器,避免重复添加同一个路径。
界面路径记不住没关系,记住逻辑:这个页面的唯一使命是告诉 PyCharm“去哪个目录找 python.exe”。后面所有的代码补全、包列表、运行配置都跟着这个路径走。
4.2 Conda Environment 与 System Interpreter:两种加法的区别
点开添加窗口后,左侧会列出几种类型,最常用的是这两种:
Conda Environment:PyCharm 需要你额外指定 conda 可执行文件的位置,好处是它会在包管理面板里识别出 conda,后续装包可以直接在 IDE 里操作,也能显示环境名。System Interpreter:只填python.exe的绝对路径,PyCharm 不管这个解释器是谁建的,用起来更轻,配置项少。
我一般选Conda Environment加 “Existing environment”,路径填到环境目录下的python.exe:
Windows: C:\Users\<用户名>\anaconda3\envs\py37\python.exe macOS: /Users/<用户名>/opt/anaconda3/envs/py37/bin/python Linux: /home/<用户名>/anaconda3/envs/py37/bin/python注意不要选成anaconda3\python.exe(那是 base 环境),也不要选成anaconda3\envs\py37\Scripts\python.exe(那里放的是脚本,不是解释器本体)。判断方法:选完之后看 PyCharm 包列表里有没有你刚装的 tensorflow、opencv-python,有就对了。
一个项目一个解释器,不要图省事让所有项目共用 base。PyCharm 的解释器是项目级配置,同一个 IDE 窗口里不同项目可以指向不同环境,这正是它比“全局改环境变量”靠谱的地方。
4.3 验证配置生效:让解释器自报家门
配完别急着写业务代码,先跑一个三行的自检脚本,把解释器路径和关键库版本一次性打出来:
import sys # 打印当前解释器的绝对路径,必须和 Anaconda 环境目录下的 python.exe 完全一致 print("executable:", sys.executable) # 打印版本,确认是环境里那个 Python,而不是系统自带的 print("python:", sys.version) # 逐个导入目标库;导入失败会在这里直接抛异常,比在业务代码里炸好定位 import cv2 import tensorflow as tf import keras print("opencv:", cv2.__version__) print("tensorflow:", tf.__version__) print("keras:", keras.__version__)sys.executable是这套自检的核心,它不撒谎:路径里出现envs\py37说明解释器指对了;如果打印出来是C:\Users\...\AppData\Local\Programs\Python\...,那说明 Settings 里根本没生效,回去检查是不是改错了项目、或者点完 OK 又点成了 Cancel。
另外两个辅助判断点:PyCharm 右下角状态栏会显示当前解释器名(配置成功的话应该能看到类似Python 3.7 (py37));Settings 的包列表里应该能直接看到 tensorflow 及其版本号。两处都对上,才算配置完成。
如果sys.executable对了但 import 还是失败,那就不是 IDE 的问题,回到第 5 章按现象排查。
5. 避坑与排查:五条按「现象 → 原因 → 解决」复盘
这一章的五条都是同一个根因的不同变体——你以为在操作 A 环境,实际在操作 B 环境。每条的排查动作都很短,难的是知道该往哪看。
5.1 安装期与激活期的三个坑
坑一:conda 命令找不到
现象:Anaconda Prompt 里一切正常,换到 CMD 或 PowerShell 敲conda就提示“不是内部或外部命令”。
原因:安装时没勾Add to PATH(或者勾了但终端没重启),conda 的路径没进当前会话的环境变量。
解决:优先用 Anaconda Prompt;必须在别的终端用,就手动进anaconda3\Scripts目录执行activate,或者临时set PATH=%PATH%;C:\Users\<用户名>\anaconda3\Scripts。别为了省事去改系统环境变量,改完容易影响机器上其他 Python 工具。
坑二:激活了环境但装到了 base
现象:conda activate py37执行了,pip install也显示成功,但新开一个终端conda list里找不到这个包。
原因:激活失败但没报错,或者 pip 本身被指向了别的解释器(比如系统里装过独立的 Python,pip命令对应的是它)。
解决:装之前先跑python -c "import sys; print(sys.executable)",确认路径里带envs\py37;更保险的是直接用python -m pip install 包名,强制用当前解释器自带的 pip,绕开 PATH 里那个来路不明的 pip。
坑三:中文路径或空格导致安装中断
现象:pip 下载完成后解包阶段报PermissionError或路径相关的OSError,重试多次都在同一位置失败。
原因:Anaconda 安装在带空格或中文的目录下,部分包的安装脚本对路径处理不严谨;或者目录权限不足,pip 缓存目录不可写。
解决:换到纯英文无空格路径重装 Anaconda(比如D:\anaconda3),这一步没有捷径。临时绕过可以加--no-cache-dir跳过缓存,但要根治还是得挪目录。
5.2 运行期 import 失败的两条线
坑四:conda list 里有,PyCharm 里 import 不到
现象:Anaconda Prompt 里python -c "import tensorflow"正常,PyCharm 里同一个文件跑起来报ModuleNotFoundError。
原因:IDE 的解释器和终端里的不是同一个。终端在py37环境,PyCharm 还指着 base 或系统 Python。
解决:按 4.3 节跑自检脚本,比对sys.executable。九成情况是当初配解释器时选成了anaconda3\python.exe(base),改成envs\py37\python.exe即可。改完记得重启运行配置,PyCharm 有些缓存不会立刻刷新。
坑五:装上了但 import 报 DLL load failed
现象:pip install tensorflow==1.13.1显示成功,import tensorflow抛ImportError: DLL load failed while importing ...。
原因:Python 版本不匹配(在 3.8+ 里装了只支持 3.7 的 wheel),或者 numpy、protobuf 被其他包升到了不兼容的大版本。
解决:先确认 Python 版本在框架支持区间内,这一步不对后面全白搭;版本对了就按 3.3 节把 numpy 钉回<1.17再重装框架。还不行就pip install --force-reinstall --no-deps tensorflow==1.13.1,跳过依赖解析强制重装,然后再单独补齐缺失的依赖——--no-deps是后悔药,只在明确知道缺什么的时候用。
6. 进阶:把环境写成文件,别让配置只活在脑子里
配好一套能跑的环境之后,最该做的一件事是把它导出成文本。理由很实在:环境会坏,机器会换,同事要复现。我在吃过一次“本地能跑、换台机器装三天”的亏之后,现在每个项目根目录必放一份环境描述文件。
6.1 conda env export 与 pip freeze 的取舍
两个命令都能导出依赖,但粒度不同。conda env export > environment.yml会把 conda 装的包连同 channel、build 号一起写进去,跨平台还原最准,但文件里可能混着上百个间接依赖;pip freeze > requirements.txt只记 pip 装的包和精确版本,干净但不管非 Python 依赖。
# 导出完整环境(含 conda 管理的底层依赖),适合内部复现 conda env export -n py37 > environment.yml # 只导出 pip 层依赖,适合给 CI 或 Docker 用,文件更小更可控 pip freeze > requirements.txt # 从文件还原:先建环境再装依赖 conda env create -f environment.yml-n py37指定导出的环境名,不指定就是当前激活的那个。还原时conda env create -f会按 yml 里的名字新建环境,如果同名已存在会报错,先conda env remove -n 旧名再建。
我的习惯是两份都留:environment.yml给内部同事一键还原,requirements.txt给部署侧,并且在后者里手动删掉tensorflow之外那些被顺带装上的gast、astor之类——它们由框架自己管,钉死反而容易冲突。
6.2 一个最小体检脚本
环境配好之后,我把 4.3 节那段自检固化成了一个check_env.py,每次换机器、换解释器、升级依赖之后都跑一遍,输出解释器路径、版本和关键库版本。它的价值不在于代码多高级,而在于把“我感觉配好了”变成“我确认配好了”。
真出问题时,这个脚本的输出就是最好的排查起点:路径不对说明解释器选错,版本不对说明装错环境,导入失败说明依赖冲突——三种情况对应三种完全不同的修法,比对着报错猜快得多。
从那以后我每次新建项目,第一件事不是写main.py,而是先把解释器路径、sys.executable和关键库版本验一遍,跑通再动手。这套动作花不到两分钟,能省掉后面几个小时的“明明装了却 import 不到”。希望帮到你。
本文还有配套的精品资源,点击获取