Anaconda Python 2.7/3.6环境无法安装PySide与Spyder的问题咨询
优先实现SimNDT在Python 2.7环境运行的操作方案
解决PySide安装的依赖冲突问题
- 当前conda的滚动更新源已经停止维护Python 2.7版本的PySide包,直接在现有环境指定版本安装必然触发UnsatisfiableError,最省时间的解决方案是新建纯净的归档源环境,不要在已经混入其他依赖的现有环境里硬塞安装包:
- 环境创建命令直接执行:
conda create -n simndt_py2 -c conda-forge/label/archive python=2.7 pyside=1.2.4 numpy=1.16 scipy=1.3 matplotlib=2.2 - 不用执着于安装项目文档要求的pyside=1.2.2版本,1.2.4和1.2.2对SimNDT的API完全兼容,没有功能性差异
- 环境创建命令直接执行:
- 不要尝试用pip安装PySide 1.x版本,pip渠道的PySide 1.x安装包早已停止维护,本地编译环节大概率会因缺库失败
绕过Spyder安装阻碍的替代方案
- 旧版Spyder和PySide1的依赖冲突是历史遗留问题,完全不需要在Python 2.7环境内强制安装Spyder本体:
- 日常运行项目直接在激活后的环境内执行
python main.py即可,调试用PySide1自带的Qt Designer就能完成界面修改 - 如果习惯Spyder的交互调试逻辑,可以在单独的Python3.8环境安装独立版Spyder,通过远程内核连接到Python2.7 SimNDT环境的计算内核,完全绕开py2环境内的Spyder依赖冲突
- 日常运行项目直接在激活后的环境内执行
快速迁移到Python 3.8版本运行的操作技巧
- 之前尝试改代码适配PyQt5失败,本质是PyQt5和原项目用的PySide1的API差异比预想的大,优先用PySide2做适配,能减少70%的修改工作量:
- 全局批量替换import语句:把项目内所有
from PySide import xxx的引用,全部替换为from PySide2 import xxx,PySide2和PySide1的接口相似度超过95%,不需要逐行调整逻辑
- 全局批量替换import语句:把项目内所有
- 批量匹配替换高频不兼容写法,不需要逐行读代码:
- 全局搜索把所有直接调用
Qt.xxx的枚举值(比如Qt.AlignCenter、Qt.WA_DeleteOnClose),替换为从QtCore模块导入的完整路径写法QtCore.Qt.xxx,这是迁移后最容易触发运行报错的位置 - 全局搜索把旧的Qt信号连接写法
self.connect(控件, SIGNAL('信号签名'), 槽函数),替换为新式的信号绑定语法控件.信号名.connect(槽函数),用正则匹配就能10分钟完成全项目替换
- 全局搜索把所有直接调用
- 环境依赖版本匹配:在Python3.8环境内直接安装适配的依赖版本,不要用最新版的PySide2:
pip install pyside2==5.15.2 numpy==1.24.4 scipy==1.10.1 matplotlib==3.7.5,这几个版本对老科学计算代码的兼容度最高,不会出现API移除导致的报错 - 遗留小问题快速处理:
- 遇到字符串编码报错,在项目入口脚本最开头添加py2兼容编码逻辑即可解决常见的迁移编码问题
- 遇到numpy废弃别名报错,全局把代码里的
np.float、np.int替换为原生Python的float、int即可
内容的提问来源于stack exchange,提问作者GuzziVtwin
相关产品推荐
相关产品推荐

