[deepin-IDE] Deepin Union Code的Python环境初始化配置
Tofloor
poster avatar
Feelup
deepin
2025-07-26 16:53
Author

最近在学习Python基础,之前使用 PyCharm 来进行 Python 的学习,但后来想想还是改用 Deepin Uninon Code 进行学习吧,毕竟使用的是 Deepin 系统。

本文仅作为 Python 学习新手使用 Deepin Uninon Code 进行 Python 学习环境配置的入门参考

说明:同时也作为一个简单的记录,方便后续我对环境的重新配置😂

首先,请在商店中搜索安装 deepin-IDE,安装后的软件名称为 Deepin Uninon Code

image.png

软件初始化配置

第一次运行软件时,会出现下图所示的安装提示

image.png

点击安装 python-lsp-server 成功

软件执行的命令:python3 -m pip install python-lsp-server[all] --target /home/nano/.unioncode/packages/Python3.12.11 -i https://pypi.tuna.tsinghua.edu.cn/simple

image.png

重启软件后,点击安装 conda

命令:bash /usr/lib/x86_64-linux-gnu/deepin-unioncode/scripts/rag/install.sh /home/nano/.unioncode

image.png

安装 pip 的过程中会需要多一些时间

image.png

conda安装成功

image.png

安装完成后,就可以在命令行中查看已经创建的虚拟环境

命令:b

说明:记录下虚拟环境名称 deepin_unioncode_env 的路径,后续的工程就是用这个虚拟环境

image.png

新建Python工程

新建Python工程

image.png

创建工程后的效果

image.png

Python虚拟环境

创建虚拟环境:conda craete -n myenv python=3.12

说明:命令格式为 conda craete -n <虚拟环境名称> python=<指定Python版本>

image.png

安装成功

image.png

查询创建的虚拟环境路径:conda env list

image.png

设置IDE默认使用的Python解释器

点击浏览,选择虚拟环境路径下 bin 文件夹下的 python 执行文件

image.png

点击应用

image.png

激活虚拟环境:conda activate myenv

image.png

安装一些需要的程序(安装到虚拟环境 myenv 中)

命令:pip install pygame PyQt5 easygui -i https://pypi.tuna.tsinghua.edu.cn/simple

说明:命令后面的 -i https://pypi.tuna.tsinghua.edu.cn/simple 表示指定软件源为清华源(这样下载比较快)

注意:后续需要安装软件时,记得先在 Deepin Union Code 的终端中激活虚拟环境,之后再进行软件的安装。

image.png

如果此时写程序,比如下面的代码

import easygui

flavor = easygui.enterbox("你喜欢什么口味的冰淇淋?")
easygui.msgbox("哦,原来你喜欢【" + flavor + "】口味的冰淇淋!")

直接点击运行则会出现如下报错信息

说明:下图中特意将报错的输出的窗口拉大了

image.png

我们还需要配置一下工程属性

image.png

勾选“在终端中运行”

image.png

然后再次点击运行就可以了,运行效果如下

image.png

安装QT设计师

为方便做图形程序的设计(图形界面),推荐安装 Qt 设计师

image.png

Python代码中调用资源文件的通用代码示例

比如下面的资源文件路径问题,源代码文件是放在与 "UI" 文件夹同级目录下的,资源文件(tempconv_menu.ui)是放在UI文件夹下的。

这种书写资源文件路径的方法,在编辑器中写代码时,源代码是能正常运行的,但打包为程序后(比如独立的.exe文件),运行程序则会提示找不到对应的资源文件。

而且,如果将源代码文件放到其它文件夹中(再使用相对路径进行书写),比如将源代码移动到下图的 Code 文件夹内,然后将资源文件的路径写为 "../UI/tempconv_menu.ui" ,此时点击运行源代码也会提示找不到该资源文件。

image.png

源代码示例如下

import sys
from PyQt5 import QtWidgets, uic
import os

ball_ui_path = os.path.join(base_dir, "UI/tempconv_menu.ui")
form_class = uic.loadUiType(ball_ui_path)[0]

class TemperatureConverterWindow(QtWidgets.QMainWindow, form_class):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.btnCtoF.clicked.connect(self.btnCtoF_clicked)
        self.btnFtoC.clicked.connect(self.btnFtoC_clicked)
        self.actionC_to_F.triggered.connect(self.btnCtoF_clicked)
        self.actionF_to_C.triggered.connect(self.btnFtoC_clicked)
        self.actionExit.triggered.connect(self.menuExit_selected)
    def btnCtoF_clicked(self):
        cel = float(self.editCel.text())
        fahr = cel * 9 / 5 + 32
        self.spinFahr.setValue(int(fahr + 0.5))
    def btnFtoC_clicked(self):
        fahr = self.spinFahr.value()
        cel = (fahr - 32) * 5 / 9
        self.editCel.setText(str(cel))
    def menuExit_selected(self):
        self.close()

app = QtWidgets.QApplication(sys.argv)
myWindow = TemperatureConverterWindow(None)
myWindow.show()
app.exec_()

image.png

所以,在程序中使用到资源文件时(如QT的UI资源文件、图像文件、声音文件等),比较推荐使用下面代码中指定资源文件路径的方法。

文件路径参考代码

def get_base_dir():
    if getattr(sys, 'frozen', False):
        return sys._MEIPASS
    else:
        return os.path.dirname(os.path.abspath(__file__))

base_dir = get_base_dir()	# 程序根目录(所有资源路径基于此目录)

ui_file = os.path.join(base_dir, "../UI/tempconv_menu.ui")	# 拼接文件路径
form_class = uic.loadUiType(ui_file)[0]

修改后的源代码如下

import sys
from PyQt5 import QtWidgets, uic
import os

# 获取程序根目录(适配开发和打包环境)
# 当程序被打包成可执行文件(如.exe)时,资源文件会被临时解压到sys._MEIPASS目录
# 当程序作为脚本直接运行时,根目录为当前脚本所在目录
# sys._MEIPASS 是 PyInstaller 为打包程序提供的临时资源目录路径,解决了开发环境和打包后环境资源路径不一致的问题。通过动态判断该属性,可以确保代码在两种环境下都能正确访问资源文件。
def get_base_dir():
    if getattr(sys, 'frozen', False):
        # 打包后的环境(.exe运行时),资源在sys._MEIPASS临时目录
        return sys._MEIPASS
    else:
        # 开发环境(脚本直接运行),根目录为当前脚本所在目录
        return os.path.dirname(os.path.abspath(__file__))       # 返回当前目录

# 程序根目录(所有资源路径基于此目录)
base_dir = get_base_dir()

# 拼接出完整的文件路径
ui_file = os.path.join(base_dir, "../UI/tempconv_menu.ui")
form_class = uic.loadUiType(ui_file)[0]

class TemperatureConverterWindow(QtWidgets.QMainWindow, form_class):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

        self.btnCtoF.clicked.connect(self.btnCtoF_clicked)
        self.btnFtoC.clicked.connect(self.btnFtoC_clicked)
        self.actionC_to_F.triggered.connect(self.btnCtoF_clicked)
        self.actionF_to_C.triggered.connect(self.btnFtoC_clicked)
        self.actionExit.triggered.connect(self.menuExit_selected)

    def btnCtoF_clicked(self):
        cel = float(self.editCel.text())
        fahr = cel * 9 / 5 + 32
        self.spinFahr.setValue(int(fahr + 0.5))

    def btnFtoC_clicked(self):
        fahr = self.spinFahr.value()
        cel = (fahr - 32) * 5 / 9
        self.editCel.setText(str(cel))

    def menuExit_selected(self):
        self.close()

app = QtWidgets.QApplication(sys.argv)
myWindow = TemperatureConverterWindow(None)
myWindow.show()
app.exec_()

该程序运行后的效果如下

image.png

《小贴士》

关于点击Qt程序运行后,终端中提示 【Could not find the Qt platform plugin "dxcb"】 的问题,可参考下面的帖子进行解决

链接:https://bbs.deepin.org/post/289980

🏖:暂时先写到这里吧,后面如果发现还需要更新,再来调整一下!

Reply Favorite View the author
All Replies
a-bird
deepin
2025-07-26 19:32
#1

兄弟,如果用pyside6做图形化开发,商店里的QT5还能用吗?

Reply View the author
Feelup
deepin
2025-07-26 21:24
#2
a-bird

兄弟,如果用pyside6做图形化开发,商店里的QT5还能用吗?

Qt5 设计师制作的就是一个图形化的外壳界面,无论你用什么软件写 Python 程序都是可以正常使用它这个外壳的; 你写 Python 代码的时候都需要导入 PyQt5 这个模块来使用这个图形化的界面(其它的编程语言有其它的模块可调用),没什么区别的。

你看下图,制作好的图形界面就是一个 .ui 的文件(我刚开始用,目前都是做的单窗口小程序),直接调用就可以了。

image.png

Reply View the author
deepin
2025-07-26 21:58
#3

一点看不懂,听天书

Reply View the author
Feelup
deepin
2025-07-28 06:39
#4

在使用 Deepin Union Code 的过程中发现一个问题:给文件重命名的时候,程序会单独弹出一个窗口获取新文件名,而且原来的文件名不会自动填入。

这个操作逻辑感觉很奇怪,比如下面我只想添加一个文件扩展名 .py ,但我却需要将原文件名重新敲一遍才行😂 。

录屏_选择区域_20250728063407.gif

Reply View the author
Feelup
deepin
2025-07-28 06:42
#5

一点看不懂,听天书

没接触太多,😂 只是看的话确实会感觉有点难,学习编程这种事还是需要实际上手才会慢慢累积出那种感觉的。

Reply View the author
Mozart
deepin
2025-08-15 11:40
#6

很有参考意义👍

Reply View the author