返回顶部
分享到

Python使用VSCode+Anaconda+DeepSeek开发软件并打包为exe

python 来源:互联网 作者:佚名 发布时间:2026-02-21 13:29:55 人浏览
摘要

本文面向Python新手,全程实操无冗余理论,基于VSCode+Anaconda Prompt环境,完成从DeepSeek辅助生成Python代码、调试运行,到最终打包为可双击运行的exe文件的全流程,同时补充Anaconda Prompt与Command

本文面向Python新手,全程实操无冗余理论,基于VSCode+Anaconda Prompt环境,完成从DeepSeek辅助生成Python代码、调试运行,到最终打包为可双击运行的exe文件的全流程,同时补充Anaconda Prompt与Command Prompt的核心区别,解决新手打包常见报错,建议收藏跟着步骤一步步操作。

一、工具确认与安装(基础前提,必做)

本次实操需用到4个核心工具/环境:VSCode(代码编辑与调试)、Anaconda(环境管理与打包)、Python(核心运行环境,Anaconda自带)、DeepSeek(代码生成,网页版/客户端均可),以下是详细安装与确认步骤,全程默认Windows系统。

1.1 VSCode安装与配置

   1.下载地址:VSCode官方下载,选择Windows版本,默认安装即可(建议勾选“添加到PATH”,方便后续调用)。

   2.打开VS Code → 左侧【扩展】栏(快捷键:Ctrl+Shift+X)→ 搜索→ 选择微软官方插件→ 点击【安装】。

安装Python插件:打开VSCode,左侧导航栏点击“扩展”(Ctrl+Shift+X),搜索“Python”,安装微软官方发布的“Python”插件(作者:Microsoft),安装完成后重启VSCode生效。

1.2 Anaconda安装与环境配置

  1. 下载地址:Anaconda官方下载,选择Windows版本(建议下载Python 3.8+版本,兼容性更好,避免过高版本导致打包报错)。

  2. 安装步骤:

    1. 双击安装包,默认下一步,重点勾选“Add Anaconda3 to my PATH environment variable”(添加环境变量,新手必勾,避免后续无法调用conda命令)。

    2. 安装路径建议默认,或自定义路径(路径中不可有中文、空格,否则后续打包会报错)。

    3. 安装完成后,关闭所有窗口,打开“Anaconda Prompt”(开始菜单搜索即可),输入命令conda --version,若显示conda版本号(如conda 23.10.0),则安装成功。

  3. 创建并激活虚拟环境(关键,避免依赖冲突):

    1. 打开Anaconda Prompt,输入命令创建环境(环境名自定义,这里用deepseek_exe):conda create -n deepseek_exe python=3.9,输入y确认安装依赖。

    2. 激活环境:输入conda activate deepseek_exe,命令行左侧出现“(deepseek_exe)”,则环境激活成功(后续所有操作均需在该环境下进行)。

1.3 DeepSeek准备

        DeepSeek使用:无需安装,直接打开网页版DeepSeek官网

二、图片选择与DeepSeek代码生成与调试(核心开发环节)

本环节将完成:选择合适的图片素材 → 用DeepSeek生成Python图片处理代码 → 在VSCode中调试代码,确保代码可正常运行(以“图片读取、尺寸调整、显示”为例,新手可直接复用,也可根据需求修改)。

2.1 图片选择与准备

  1. 图片要求:选择JPG/PNG格式的图片(避免使用GIF动图,后续调试易报错),图片路径建议放在VSCode工作目录下(如:新建文件夹“DeepSeek_Exe_Demo”,将图片命名为“test.jpg”,放入该文件夹)。

  2. 路径注意:图片路径、工作目录路径,不可有中文、空格、特殊字符(如“测试图片.jpg”“DeepSeek Demo”均不可,建议改为“test.jpg”“DeepSeek_Exe_Demo”),否则会出现“路径找不到”的报错。

2.2 DeepSeek代码生成(精准提示词是关键)

1.打开DeepSeek-Coder模型,输入以下提示词(可直接复制,修改图片路径即可),生成Python代码:

提示词:根据上述图片使用python语言写一个顶置在电脑最高图层的软件。

DeepSeek生成的代码示例(可直接复用,需确认图片路径正确):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

import tkinter as tk

from datetime import datetime

 

# ------------------ 配置参数 ------------------

TARGET_DATE = datetime(2026, 12, 24, 0, 0, 0)      # 考研日期(当天0点)

TITLE_TEXT = "27考研倒计时"

DATE_TEXT = "考试日期:2026年12月24日"

MOTTO_TEXT = "克服困难,勇敢者自有千方百计,怯懦者只感到万般无奈。"

 

# 颜色与字体

BG_COLOR = "#0a0f0f"          # 深色背景

FG_TITLE = "#ffffff"

FG_COUNTDOWN = "#a3ff73"      # 亮绿色

FG_DATE = "#cccccc"

FG_MOTTO = "#ffd966"          # 柔和黄色

FONT_TITLE = ("微软雅黑", 20, "bold")

FONT_COUNTDOWN = ("Consolas", 18, "bold")   # 等宽字体,保持宽度稳定

FONT_DATE = ("微软雅黑", 12)

FONT_MOTTO = ("楷体", 13, "italic")

 

# 窗口透明度 (0~1)

WINDOW_ALPHA = 0.92

 

# 右下角边距

MARGIN_RIGHT = 30

MARGIN_BOTTOM = 50

 

# ------------------ 功能函数 ------------------

def update_countdown():

    """更新时间显示"""

    now = datetime.now()

    delta = TARGET_DATE - now

 

    if delta.total_seconds() < 0:

        # 考试已过或已开始

        countdown_label.config(text="???? 考研已开始,加油! ????")

        return   # 停止刷新

    else:

        days = delta.days

        seconds = delta.seconds

        hours = seconds // 3600

        minutes = (seconds % 3600) // 60

        secs = seconds % 60

        # 格式:还剩 XXX天 HH:MM:SS

        time_str = f"还剩 {days} 天  {hours:02d}:{minutes:02d}:{secs:02d}"

        countdown_label.config(text=time_str)

        # 每秒调用自己

        root.after(1000, update_countdown)

 

def start_move(event):

    """记录拖动起点"""

    root.drag_start_x = event.x

    root.drag_start_y = event.y

 

def do_move(event):

    """窗口拖动"""

    deltax = event.x - root.drag_start_x

    deltay = event.y - root.drag_start_y

    x = root.winfo_x() + deltax

    y = root.winfo_y() + deltay

    root.geometry(f"+{x}+{y}")

 

def quit_app(event):

    """右键退出程序"""

    root.destroy()

 

# ------------------ 创建窗口 ------------------

root = tk.Tk()

root.title("考研倒计时")           # 任务栏显示,但会被覆盖

root.overrideredirect(True)       # 去掉窗口边框

root.attributes('-topmost', True)  # 始终置顶

root.attributes('-alpha', WINDOW_ALPHA)  # 透明度

root.configure(bg=BG_COLOR)

 

# ------------------ 放置控件 ------------------

# 使用Frame作为容器,方便统一背景和内边距

main_frame = tk.Frame(root, bg=BG_COLOR)

main_frame.pack(padx=15, pady=12)

 

# 标题

title_label = tk.Label(main_frame, text=TITLE_TEXT, font=FONT_TITLE,

                       fg=FG_TITLE, bg=BG_COLOR)

title_label.pack(pady=(0, 8))

 

# 倒计时(核心,会动态更新)

countdown_label = tk.Label(main_frame, text="正在计算...", font=FONT_COUNTDOWN,

                           fg=FG_COUNTDOWN, bg=BG_COLOR)

countdown_label.pack(pady=5)

 

# 考试日期

date_label = tk.Label(main_frame, text=DATE_TEXT, font=FONT_DATE,

                      fg=FG_DATE, bg=BG_COLOR)

date_label.pack(pady=5)

 

# 励志名言(自动换行,宽度约400像素)

motto_label = tk.Label(main_frame, text=MOTTO_TEXT, font=FONT_MOTTO,

                       fg=FG_MOTTO, bg=BG_COLOR, wraplength=400, justify="center")

motto_label.pack(pady=8)

 

# ------------------ 绑定事件 ------------------

root.bind('<Button-1>', start_move)          # 左键按下记录位置

root.bind('<B1-Motion>', do_move)            # 左键移动拖动窗口

root.bind('<Button-3>', quit_app)            # 右键退出程序

 

# 为了让所有区域都能拖动和退出,给所有子控件也绑定相同事件(可选)

for widget in (title_label, countdown_label, date_label, motto_label):

    widget.bind('<Button-1>', start_move)

    widget.bind('<B1-Motion>', do_move)

    widget.bind('<Button-3>', quit_app)

 

# ------------------ 窗口初始位置(右下角) ------------------

root.update_idletasks()          # 更新控件布局,获取真实宽高

win_width = root.winfo_width()

win_height = root.winfo_height()

screen_width = root.winfo_screenwidth()

screen_height = root.winfo_screenheight()

x = screen_width - win_width - MARGIN_RIGHT

y = screen_height - win_height - MARGIN_BOTTOM

root.geometry(f'+{x}+{y}')

 

# ------------------ 启动倒计时刷新 ------------------

update_countdown()

 

# ------------------ 进入消息循环 ------------------

root.mainloop()

2.3 VSCode代码调试(必做,避免打包后无法运行)

  1. 运行代码调试:

    1. 点击代码右上角的“运行”按钮(或按F5),选择“Python文件”运行方式。

    2. 正常情况:会弹出调整后的图片窗口,关闭图片窗口后,VSCode终端会输出“图片处理完成!”,无报错则调试成功。

    3. 常见报错及解决:

      • 报错“FileNotFoundError: [Errno 2] No such file or directory: './test.jpg'”:检查图片路径、图片命名是否正确,确保图片在工作目录下。

      • 报错“ModuleNotFoundError: No module named 'PIL'”:说明虚拟环境未关联成功,重新关联deepseek_exe环境,或在终端输入“pip install pillow”重新安装依赖。

注意:调试环节必须确保代码可正常运行,无任何报错,否则后续打包的exe文件也会无法运行。

三、使用Anaconda打包(核心打包环节,VSCode+Anaconda Prompt结合)

本环节将使用Anaconda Prompt(必须在之前创建的deepseek_exe环境中),结合pyinstaller工具,将调试成功的Python代码打包为exe文件,全程实操,步骤清晰,避开新手常见坑。

3.1 打包前准备(关键,避免打包失败)

  1. 确认环境:打开Anaconda Prompt,下载插件Pyinstaller

    1

    install Pyinstaller

  2. 切换工作目录:输入命令cd 你的VSCode工作目录路径(如:我的工作目录是“D:\DeepSeek_Exe_Demo”,则输入cd D:\DeepSeek_Exe_Demo),切换到Python文件所在的目录。

    1

    cd D:\DeepSeek_Exe_Demo

3.2 执行打包命令(核心步骤)

在Anaconda Prompt中,输入以下打包命令(根据需求选择,新手优先选择命令1,简单无冗余):

  1. 命令1(推荐,单文件+隐藏控制台):

    1

    pyinstaller -F -w image_tool.py

    1. 参数说明:-F(打包为单个exe文件,方便传输和使用)、-w(隐藏运行时的控制台窗口,适合GUI程序,本次图片显示程序推荐使用)。

  2. 命令2(带图标,个性化):

    1

    pyinstaller -F -w -i icon.ico image_tool.py

    1. 参数说明:-i icon.ico(给exe文件添加图标,icon.ico需放在当前工作目录下,可网上下载.ico格式图标,命名为icon.ico)。

输入命令后,按回车键,开始打包,打包过程中会显示“Building EXE from EXE-00.toc completed successfully.”,则打包成功(打包时间根据代码复杂度、依赖多少而定,一般1-5分钟)。

3.3 找到exe文件并验证

  1. 查找exe文件:打包成功后,工作目录下会生成“dist”文件夹,打开该文件夹,即可找到“image_tool.exe”文件(单文件打包,仅这一个exe,可单独复制使用)。

  2. 验证exe文件:

    1. 双击“image_tool.exe”,若正常弹出图片窗口,关闭窗口后无报错,说明打包成功,exe文件可正常使用。

    2. 将exe文件复制到其他文件夹(如桌面),双击仍可正常运行,说明打包无路径依赖问题。

3.4 打包常见报错及解决方法(新手必看)

  • 报错“pyinstaller : 无法将“pyinstaller”识别为 cmdlet、函数、脚本文件或可运行程序的名称”:说明pyinstaller未安装成功,在deepseek_exe环境中重新输入pip install pyinstaller安装。

  • 打包成功,但双击exe无反应/报错“找不到图片”:检查图片路径是否为相对路径(如./test.jpg),绝对路径(如D:\DeepSeek_Exe_Demo\test.jpg)会导致exe脱离原文件夹后无法找到图片;解决方法:将图片与exe文件放在同一文件夹,或修改代码为相对路径。

  • exe运行报错“Failed to execute script image_tool”:代码调试不彻底,存在隐藏报错,回到VSCode重新运行代码,确保无任何报错后,再重新打包。

四、拓展:Anaconda Prompt和Command Prompt是什么以及区别

很多新手会混淆Anaconda Prompt和Windows自带的Command Prompt(CMD),尤其是本次实操为什么不用CMD打包,下面用通俗的语言解释两者的定义及核心区别,结合本次实操场景理解更易。

4.1 两者定义(通俗版)

  • Command Prompt(CMD,命令提示符):Windows系统自带的命令行工具,是系统级的命令行,可执行Windows系统命令(如cd、dir、ipconfig),也可执行Python命令,但不具备虚拟环境管理功能。

  • Anaconda Prompt:Anaconda安装后自带的命令行工具,基于CMD开发,本质是“CMD+Anaconda环境管理功能”,可执行CMD的所有命令,同时能直接调用conda命令,管理虚拟环境、安装依赖等。

4.2 核心区别(结合本次实操,重点)

对比维度

Command Prompt(CMD)

Anaconda Prompt

环境管理

无虚拟环境管理功能,只能使用系统默认的Python环境,若系统中安装多个Python版本,易出现依赖冲突。

支持conda虚拟环境(如本次的deepseek_exe环境),可隔离不同项目的依赖,避免冲突,适合多项目开发。

依赖调用

需手动配置环境变量,才能调用pip、Python等命令,若环境变量配置错误,无法执行相关命令。

自动关联Anaconda环境,无需手动配置环境变量,激活虚拟环境后,可直接调用pip、conda、Python等命令。

本次实操适用性

不适用:无法激活deepseek_exe虚拟环境,打包时会因依赖缺失(如pillow、pyinstaller仅安装在虚拟环境中)导致打包失败。

适用:可激活虚拟环境,调用虚拟环境中的依赖,确保打包时能正常加载所有模块,避免报错。

使用场景

适合执行简单的Windows系统命令,或单个Python环境的简单操作。

适合Python多项目开发、依赖管理、打包等场景,是数据科学、Python开发的常用工具。

4.3 补充说明

本次实操必须使用Anaconda Prompt,核心原因是:我们的依赖(pillow、pyinstaller)都安装在deepseek_exe虚拟环境中,CMD无法识别该虚拟环境,打包时会找不到相关依赖,导致打包失败;而Anaconda Prompt可直接激活虚拟环境,确保所有依赖都能被正常调用。

五、总结与注意事项(必看,避坑关键)

  1. 全程核心:虚拟环境是关键,所有工具安装、代码调试、打包,都需在虚拟环境中进行,避免依赖冲突。

  2. 路径禁忌:所有文件(Python文件、图片、工作目录)的路径、命名,不可有中文、空格、特殊字符,否则会导致调试或打包报错。

  3. 调试优先:代码必须在VSCode中调试通过,无任何报错后,再进行打包,否则exe文件会无法运行。

  4. exe使用:打包后的exe文件,若代码中使用了本地图片,需将图片与exe文件放在同一文件夹,否则会找不到图片。

  5. 拓展延伸:本文以图片处理为例,若需开发其他功能(如数据处理、GUI界面),可通过DeepSeek生成对应代码,调试通过后,按相同步骤打包即可。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计