PyTorch环境配置及安装保姆级最新教程
目录1、下载anaconda安装包2、安装2.1 双击安装包2.2 点击Next2.3 点击I Agree2.4 点击Next2.5 选择安装路径Next2.6 勾选第一个第三个和第四个点击Install2.7 等待安装2.8 连续点击两个Next后点击Fnish完成安装2.9 检查是否安装成功2.10 配置环境变量3、安装CUDA3.1 下载安装包3.2 安装3.3 配置环境变量3.4 检查是否安装成功4.安装pytorch4.1 找到下载链接4.2 创建虚拟环境4.3 下载pytorch4.4 检查是否安装成功5. 安装pycharm6.将pycharm与pytorch连接在一起6.1 新建项目并配置环境2023.1版PyCharm配置2025.2版PyCharm配置6.2 检验是否连接成功2023.1版检验2025.2版检验今天带来PyTorch的安装配置用于咱们机器学习的跑代码在软件工程中很常用。1、下载anaconda安装包这里我推荐去清华源下载因为国内的下载速度快链接如下Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror我推荐下载2024这个版本下载太新的可能有些问题自己解决不了。2、安装2.1 双击安装包2.2 点击Next2.3 点击I Agree2.4 点击Next这里要做一个选择是只为自己安装还是为所有用户安装这个主要看自己2.5 选择安装路径Next2.6 勾选第一个第三个和第四个点击Install2.7 等待安装2.8 连续点击两个Next后点击Fnish完成安装Finish页面上的两个选项可以取消勾选第一个是直接启动anaconda第二个是跳转到官网2.9 检查是否安装成功点开搜索然后输入anaconda打开Anaconda Prompt如果命令行前面有一个(base)并且输入以下命令之后输出版本说明安装成功。conda --version2.10 配置环境变量右击此电脑——属性——高级系统设置点击环境变量双击系统变量中的path找到软件所在目录就是刚才的安装目录我的在D盘双击空白的地方就可以添加对照我下面图片中的三个路径找你自己的路径然后添加配置完成3、安装CUDA3.1 下载安装包进入CUDA官网CUDA Toolkit 11.8 下载 |NVIDIA 开发人员然后这里推荐下载11.8的安装包但是要求是你自己电脑的显卡驱动至少为535.215CUDA版本要大于等于11.8在命令行窗口输入nvidia-smi查看显卡驱动和CUDA Version的版本如下图这是你的电脑能支持的最高版本只能下载比这个版本低或者等于这个版本的CUDA。点进去之后根据以下配置选择电脑是64位还是32位可以去设置里面看设置—系统—系统信息win10就选10win11就选11选好之后点击第五步的下载即可3.2 安装双击安装包点击OK这个路径安装完之后会自动删除开始解压因为我之前下载过CUDA所以会有下面这个界面直接点击继续他会删除旧版本安装现在这个版本如果你的没有出现这个提示直接点继续就行点击“同意并继续”选择自定义安装然后点击下一步只需要第一个CUDA其他取消勾选点击CUDA左边的号取消第四个选项的勾选点击下一步安装位置默认就行以防后面出现问题点击下一步等待安装点击下一步点击关闭3.3 配置环境变量同样按照上面步骤打开path然后可以看到里面已经有两个变量了如下图然后还需要配置两个变量如果你刚才跟我一样默认安装路径那么我们的路径是一样的如下图添加之后单击选中点击上移移到最上方然后点击确定就可以了3.4 检查是否安装成功winR——输入cmd——回车输入一下命令如果出现下图的几行英文说明已经安装成功nvcc -V温馨提示这里的V一定要大写不然就会有下面这种报错nvcc fatal : No input files specified; use option --help for more information4.安装pytorch4.1 找到下载链接首先进入PyTorch官网PyTorch由于我们是要下载与CUDA 11.8相匹配的版本所以划到下面点击下图所示按钮下载以前的版本进去之后往下滑找到v2.3.1这个版本我们发现这个版本适配CUDA 11.8你的CUDA如果是其他版本一定要看清楚哪个版本的PyTorch适配然后复制下图红框中这一串英文4.2 创建虚拟环境紧接着打开Anaconda Prompt,只需要在搜索框中输入关键词就可以找到单击打开先创建一个虚拟环境输入以下代码回车pytorch是我起的名字可以换成其它名字Python安装3.9就可以了不用太高conda create -n pytorch python3.9这一步输入“y”就行创建完成后我们需要激活这个虚拟环境激活的命令上面创建的结尾就给了直接复制粘贴或者自己手打一下确保万无一失然后回车4.3 下载pytorch接着我们就进入了我们创建的pytorch环境然后粘贴我们刚才在pytorch官网复制的那串英文回车建议白天下载因为毕竟是国外的网站白天下载比较快同样这里输入“y”回车即可等待下载4.4 检查是否安装成功输入python紧接着输入import torch如果没报错的话说明pytorch安装成功紧接着查看CUDA有没有一般情况下是有的输入以下代码如果返回True说明成功系统有GPU跑代码速度可以快一点如果返回False也不是说环境不能用仍然是可以使用的只是代码是用CPU跑运行速度上有差异而已。torch.cuda.is_available()5. 安装pycharmpycharm的安装可以查看我的另外两篇博客2023.1版下载安装配置Pycharm2023.1保姆级教程2025.2版PyCharm2025.2下载安装配置保姆级教程也可以自己进行一个安装6.将pycharm与pytorch连接在一起6.1 新建项目并配置环境2023.1版PyCharm配置点击新建项目之后出现以下页面选择“纯Python”进行配置如下选择添加本地解释器选择Conda环境然后点击②的位置找到anaconda安装目录中的conda.bat文件接着点击加载环境下拉选择我们创建的虚拟环境然后点击确定然后返回到这个页面接着点击创建进去之后pycharm自动加载文件等待几分钟就好了右下角有个pytorch表明配置成功点击“pytorch”还可以切换环境如果有多个环境点击这里切换还是挺方便的。如下2025.2版PyCharm配置点击新建项目之后出现以下页面选择“纯Python”进行配置如下2025.2版本的PyCharm只需要在一个页面配置就行相对省事儿。同上进去之后pycharm自动加载文件等待几分钟就好了同上右下角有个pytorch表明配置成功同上点击“pytorch”还可以切换环境如果有多个环境点击这里切换还是挺方便的。如下6.2 检验是否连接成功2023.1版检验新建一个.py文件步骤如下文件名自拟输入以下代码import torch print(torch.cuda.is_available())右键点击运行如果返回一个True说明已经连接成功。如下当然如果返回的是False也不要担心没连接成功这个只是检测cuda能不能使用的如果你在“4.4检查是否安装成功”中的命令提示符窗口中返回的如果也是False那这里也没问题。另外其实在新建项目的时候加载环境可以加载出来说明基本是可以连接了。最能体现连接成功的操作是如果运行一个没有问题的.py文件可以运行成功的话那就说明pytorch pycharm环境配置完成。输入一下代码测试一下。import torch x torch.rand(5,5) print(x)以下是一个俄罗斯方块的代码大家也可以拿去测试import tkinter as tk from tkinter import messagebox import random # 设置行数和列数 Row 20 Col 12 # 设置格子的刷新频率单位是毫秒 FPS 250 # 设置每个格子的大小 cell_size 30 # 设置窗口的高和宽 height Row * cell_size width Col * cell_size # 设置不同形状的格子 SHAPES { Z: [(-1, -1), (0, -1), (0, 0), (1, 0)], O: [(-1, -1), (0, -1), (-1, 0), (0, 0)], S: [(-1, 0), (0, 0), (0, -1), (1, -1)], T: [(-1, 0), (0, 0), (0, -1), (1, 0)], I: [(0, 1), (0, 0), (0, -1), (0, -2)], L: [(-1, 0), (0, 0), (-1, -1), (-1, -2)], J: [(-1, 0), (0, 0), (0, -1), (0, -2)] } # 设置格子的颜色 SHAPESCOLOR { O:blue, S:red, T:yellow, I:green, L:purple, J:orange, Z:Cyan, } # 绘制面板将draw_blank_board方法修改成如下方法 def draw_board(canvas, block_list): for ri in range(Row): for ci in range(Col): cell_type block_list[ri][ci] if cell_type: draw_cell_background(canvas, ci, ri, SHAPESCOLOR[cell_type]) else: draw_cell_background(canvas, ci, ri) # 在画板上绘制格子 def draw_cell_background(canvas, col, row, color#CCCCCC): x0 col * cell_size y0 row * cell_size x1 col * cell_size cell_size y1 row * cell_size cell_size # 创建矩形 canvas.create_rectangle(x0, y0, x1, y1, fillcolor, outlinewhite, width2) # 绘制板块 def draw_blank_board(canvas): for ri in range(Row): for cj in range(Col): draw_cell_background(canvas, cj, ri) # 绘制单元格 def draw_cells(canvas, col, row, cell_list, color#CCCCCC): :param canvas: 画板对象 :param col: 这个形状的的原点所在的列 :param row: 这个形状所的原点所在的行 :param cell_list: 这个形状各个格子相对于自身的原点所处的位置坐标 :param color: 这个形状的颜色 :return: for cell in cell_list: cell_col, cell_row cell ci cell_col col ri cell_row row # 判断是否越界 if 0 col Col and 0 row Row: draw_cell_background(canvas, ci, ri, color) # 首先创建一个窗体 win tk.Tk() # 绘制画布的长宽 canvas tk.Canvas(win, widthwidth, heightheight) # 打包放置组件对象 canvas.pack() # 画背景 block_list [] for i in range(Row): i_row [ for j in range(Col)] block_list.append(i_row) draw_board(canvas, block_list) # 定义让俄罗斯方块移动的方法 def draw_block_move(canvas, block, direction[0,0]): :param canvas: 面板对象 :param block: 俄罗斯方块 :param direction: 移动的方向 :return: shape_type block[kind] c, r block[cr] cell_list block[cell_list] draw_cells(canvas, c, r, cell_list) dc, dr direction new_c, new_r c dc, r dr block[cr] [new_c, new_r] draw_cells(canvas, new_c, new_r, cell_list, SHAPESCOLOR[shape_type]) # 用字典定义每个形状的属性 one_block { kind: O, # 对应俄罗斯方块的类型 cell_list: SHAPES[O], # 对应的每个俄罗斯方块的坐标 cr: [3, 3], # 对应的行列坐标 } def product_new_block(): # 随机生成新的俄罗斯方块 kind random.choice(list(SHAPES.keys())) cr [Col // 2, 0] new_block { kind: kind, cell_list: SHAPES[kind], cr: cr } return new_block def check_move(block, direction[0,0]): :param block:俄罗斯方块的前身 :param direction: 移动方向 :return: boolean 是否可以朝着指定的方向移动 cc, cr block[cr] cell_list block[cell_list] for cell in cell_list: cell_c, cell_r cell c cell_c cc direction[0] r cell_r cr direction[1] # 判断边界 if c 0 or c Col or r Row: return False # r 0是防止格子下不来的情况 if r 0 and block_list[r][c]: return False return True # 保存当前的俄罗斯方块到列表里面 def save_to_block_list(block): shape_type block[kind] cc, cr block[cr] cell_list block[cell_list] for cell in cell_list: cell_c, cell_r cell c cell_c cc r cell_r cr block_list[r][c] shape_type def horizontal_move_block(event): 左右水平移动俄罗斯方块 event:键盘的监听事件 # 这里只设置了左右两个方向 direction [0, 0] if event.keysym Left: direction [-1, 0] elif event.keysym Right: direction [1, 0] else: return global current_block if current_block is not None and check_move(current_block, direction): draw_block_move(canvas, current_block, direction) def rotate_block(event): global current_block if current_block is None: return cell_list current_block[cell_list] rotate_list [] for cell in cell_list: cell_c, cell_r cell rotate_cell [cell_r, -cell_c] rotate_list.append(rotate_cell) block_after_rotate { kind: current_block[kind], # 对应俄罗斯方块的类型 cell_list: rotate_list, cr: current_block[cr] } if check_move(block_after_rotate): cc, cr current_block[cr] draw_cells(canvas, cc, cr, current_block[cell_list]) draw_cells(canvas, cc, cr, rotate_list, SHAPESCOLOR[current_block[kind]]) current_block block_after_rotate def land(event): global current_block if current_block is None: return cell_list current_block[cell_list] cc, cr current_block[cr] min_height Row for cell in cell_list: cell_c, cell_r cell c, r cell_c cc, cell_r cr if block_list[r][c]: return h 0 for ri in range(r 1, Row): if block_list[ri][c]: break else: h 1 if h min_height: min_height h down [0, min_height] if check_move(current_block, down): draw_block_move(canvas, current_block, down) # 在原有的rotate_block方法外下面添加 def check_row_complete(row): for cell in row: if cell : return False return True score 0 win.title(SCORES: %s % score) # 标题中展示分数 def check_and_clear(): has_complete_row False for ri in range(len(block_list)): if check_row_complete(block_list[ri]): has_complete_row True # 当前行可消除 if ri 0: for cur_ri in range(ri, 0, -1): block_list[cur_ri] block_list[cur_ri - 1][:] block_list[0] [ for j in range(Col)] else: block_list[ri] [ for j in range(Col)] global score # 每消除一次 加10分 score 10 if has_complete_row: draw_board(canvas, block_list) # 重新绘制 win.title(SCORES: %s % score) # 让游戏不断循环 通过递归实现 def game_loop(): win.update() global current_block # 如果当前没有俄罗斯方块 产生一个新的 if current_block is None: # 生成新的俄罗斯方块 new_block product_new_block() draw_block_move(canvas, new_block) current_block new_block # 游戏结束 if not check_move(current_block, [0, 0]): messagebox.showinfo(Game Over!, Your Score is %s % score) win.destroy() return # 如果当前有了就往下走 else: if check_move(current_block, [0, 1]): draw_block_move(canvas, current_block, [0, 1]) else: # 保存当前的俄罗斯方块 save_to_block_list(current_block) current_block None # 游戏结束 check_and_clear() win.after(FPS, game_loop) # 注意的是这个game_loop后面不能加括号 # 当前的俄罗斯方块 current_block None # 画布聚焦 canvas.focus_set() # 添加左右移动的事件 canvas.bind(KeyPress-Left, horizontal_move_block) canvas.bind(KeyPress-Right, horizontal_move_block) # 添加变化角度的事件 canvas.bind(KeyPress-Up, rotate_block) canvas.bind(KeyPress-Down, land) game_loop() win.mainloop()界面如下2025.2版检验同上新建一个.py文件名字自拟同上输入以下代码 import torch print(torch.cuda.is_available()) 右键点击运行同上如果返回一个True说明已经连接成功。如下同上如果返回的是False也不要担心没连接成功这个只是检测cuda能不能使用的如果你在“4.4检查是否安装成功”中的命令提示符窗口中返回的如果也是False那这里也没问题。另外其实在新建项目的时候加载环境可以加载出来说明基本是可以连接了。最能体现连接成功的操作是如果运行一个没有问题的.py文件可以运行成功的话那就说明pytorch pycharm环境配置完成。输入以下代码测试一下。import torch x torch.rand(5,5) print(x)同上以下是一个俄罗斯方块的代码大家也可以拿去测试import tkinter as tk from tkinter import messagebox import random # 设置行数和列数 Row 20 Col 12 # 设置格子的刷新频率单位是毫秒 FPS 250 # 设置每个格子的大小 cell_size 30 # 设置窗口的高和宽 height Row * cell_size width Col * cell_size # 设置不同形状的格子 SHAPES { Z: [(-1, -1), (0, -1), (0, 0), (1, 0)], O: [(-1, -1), (0, -1), (-1, 0), (0, 0)], S: [(-1, 0), (0, 0), (0, -1), (1, -1)], T: [(-1, 0), (0, 0), (0, -1), (1, 0)], I: [(0, 1), (0, 0), (0, -1), (0, -2)], L: [(-1, 0), (0, 0), (-1, -1), (-1, -2)], J: [(-1, 0), (0, 0), (0, -1), (0, -2)] } # 设置格子的颜色 SHAPESCOLOR { O:blue, S:red, T:yellow, I:green, L:purple, J:orange, Z:Cyan, } # 绘制面板将draw_blank_board方法修改成如下方法 def draw_board(canvas, block_list): for ri in range(Row): for ci in range(Col): cell_type block_list[ri][ci] if cell_type: draw_cell_background(canvas, ci, ri, SHAPESCOLOR[cell_type]) else: draw_cell_background(canvas, ci, ri) # 在画板上绘制格子 def draw_cell_background(canvas, col, row, color#CCCCCC): x0 col * cell_size y0 row * cell_size x1 col * cell_size cell_size y1 row * cell_size cell_size # 创建矩形 canvas.create_rectangle(x0, y0, x1, y1, fillcolor, outlinewhite, width2) # 绘制板块 def draw_blank_board(canvas): for ri in range(Row): for cj in range(Col): draw_cell_background(canvas, cj, ri) # 绘制单元格 def draw_cells(canvas, col, row, cell_list, color#CCCCCC): :param canvas: 画板对象 :param col: 这个形状的的原点所在的列 :param row: 这个形状所的原点所在的行 :param cell_list: 这个形状各个格子相对于自身的原点所处的位置坐标 :param color: 这个形状的颜色 :return: for cell in cell_list: cell_col, cell_row cell ci cell_col col ri cell_row row # 判断是否越界 if 0 col Col and 0 row Row: draw_cell_background(canvas, ci, ri, color) # 首先创建一个窗体 win tk.Tk() # 绘制画布的长宽 canvas tk.Canvas(win, widthwidth, heightheight) # 打包放置组件对象 canvas.pack() # 画背景 block_list [] for i in range(Row): i_row [ for j in range(Col)] block_list.append(i_row) draw_board(canvas, block_list) # 定义让俄罗斯方块移动的方法 def draw_block_move(canvas, block, direction[0,0]): :param canvas: 面板对象 :param block: 俄罗斯方块 :param direction: 移动的方向 :return: shape_type block[kind] c, r block[cr] cell_list block[cell_list] draw_cells(canvas, c, r, cell_list) dc, dr direction new_c, new_r c dc, r dr block[cr] [new_c, new_r] draw_cells(canvas, new_c, new_r, cell_list, SHAPESCOLOR[shape_type]) # 用字典定义每个形状的属性 one_block { kind: O, # 对应俄罗斯方块的类型 cell_list: SHAPES[O], # 对应的每个俄罗斯方块的坐标 cr: [3, 3], # 对应的行列坐标 } def product_new_block(): # 随机生成新的俄罗斯方块 kind random.choice(list(SHAPES.keys())) cr [Col // 2, 0] new_block { kind: kind, cell_list: SHAPES[kind], cr: cr } return new_block def check_move(block, direction[0,0]): :param block:俄罗斯方块的前身 :param direction: 移动方向 :return: boolean 是否可以朝着指定的方向移动 cc, cr block[cr] cell_list block[cell_list] for cell in cell_list: cell_c, cell_r cell c cell_c cc direction[0] r cell_r cr direction[1] # 判断边界 if c 0 or c Col or r Row: return False # r 0是防止格子下不来的情况 if r 0 and block_list[r][c]: return False return True # 保存当前的俄罗斯方块到列表里面 def save_to_block_list(block): shape_type block[kind] cc, cr block[cr] cell_list block[cell_list] for cell in cell_list: cell_c, cell_r cell c cell_c cc r cell_r cr block_list[r][c] shape_type def horizontal_move_block(event): 左右水平移动俄罗斯方块 event:键盘的监听事件 # 这里只设置了左右两个方向 direction [0, 0] if event.keysym Left: direction [-1, 0] elif event.keysym Right: direction [1, 0] else: return global current_block if current_block is not None and check_move(current_block, direction): draw_block_move(canvas, current_block, direction) def rotate_block(event): global current_block if current_block is None: return cell_list current_block[cell_list] rotate_list [] for cell in cell_list: cell_c, cell_r cell rotate_cell [cell_r, -cell_c] rotate_list.append(rotate_cell) block_after_rotate { kind: current_block[kind], # 对应俄罗斯方块的类型 cell_list: rotate_list, cr: current_block[cr] } if check_move(block_after_rotate): cc, cr current_block[cr] draw_cells(canvas, cc, cr, current_block[cell_list]) draw_cells(canvas, cc, cr, rotate_list, SHAPESCOLOR[current_block[kind]]) current_block block_after_rotate def land(event): global current_block if current_block is None: return cell_list current_block[cell_list] cc, cr current_block[cr] min_height Row for cell in cell_list: cell_c, cell_r cell c, r cell_c cc, cell_r cr if block_list[r][c]: return h 0 for ri in range(r 1, Row): if block_list[ri][c]: break else: h 1 if h min_height: min_height h down [0, min_height] if check_move(current_block, down): draw_block_move(canvas, current_block, down) # 在原有的rotate_block方法外下面添加 def check_row_complete(row): for cell in row: if cell : return False return True score 0 win.title(SCORES: %s % score) # 标题中展示分数 def check_and_clear(): has_complete_row False for ri in range(len(block_list)): if check_row_complete(block_list[ri]): has_complete_row True # 当前行可消除 if ri 0: for cur_ri in range(ri, 0, -1): block_list[cur_ri] block_list[cur_ri - 1][:] block_list[0] [ for j in range(Col)] else: block_list[ri] [ for j in range(Col)] global score # 每消除一次 加10分 score 10 if has_complete_row: draw_board(canvas, block_list) # 重新绘制 win.title(SCORES: %s % score) # 让游戏不断循环 通过递归实现 def game_loop(): win.update() global current_block # 如果当前没有俄罗斯方块 产生一个新的 if current_block is None: # 生成新的俄罗斯方块 new_block product_new_block() draw_block_move(canvas, new_block) current_block new_block # 游戏结束 if not check_move(current_block, [0, 0]): messagebox.showinfo(Game Over!, Your Score is %s % score) win.destroy() return # 如果当前有了就往下走 else: if check_move(current_block, [0, 1]): draw_block_move(canvas, current_block, [0, 1]) else: # 保存当前的俄罗斯方块 save_to_block_list(current_block) current_block None # 游戏结束 check_and_clear() win.after(FPS, game_loop) # 注意的是这个game_loop后面不能加括号 # 当前的俄罗斯方块 current_block None # 画布聚焦 canvas.focus_set() # 添加左右移动的事件 canvas.bind(KeyPress-Left, horizontal_move_block) canvas.bind(KeyPress-Right, horizontal_move_block) # 添加变化角度的事件 canvas.bind(KeyPress-Up, rotate_block) canvas.bind(KeyPress-Down, land) game_loop() win.mainloop()界面如下如果对你有用的话可以点赞收藏哦以防找不到了