终端运行,错误代码截图发下
不知道你安装的那个版本,常规3个方案:
1、看看库里有没有相关的依赖可以安装。
2、修改有道翻译的启动脚本指定 Python 路径。
3、要是怕系统的python搞坏了,用虚拟环境运行旧版依赖,测试可行后在创建快捷启动脚本。
4、该用其他翻译软件,例如:pot等。或者安装官方版本的linux包试试。
不知道你安装的那个版本,常规3个方案:
1、看看库里有没有相关的依赖可以安装。
2、修改有道翻译的启动脚本指定 Python 路径。
3、要是怕系统的python搞坏了,用虚拟环境运行旧版依赖,测试可行后在创建快捷启动脚本。
4、该用其他翻译软件,例如:pot等。或者安装官方版本的linux包试试。
官网下载的6.0.0版本,星火商店的spark包和apm包都试过,一样的打不开。
终端运行,错误代码截图发下
youdao-dict
/usr/share/youdao-dict/dae/api.py:73: SyntaxWarning: invalid escape sequence '/'
p = re.compile('(^file://)|(^http://)|(^https://)|(^data:)')
/usr/share/youdao-dict/dae/webview.py:86: SyntaxWarning: invalid escape sequence '/'
p = re.compile('(^file://)|(^http://)|(^https://)|(^data:)')
Traceback (most recent call last):
File "/usr/bin/youdao-dict", line 27, in
from dae.daeclient import DAEClient
File "/usr/share/youdao-dict/dae/daeclient.py", line 40, in
from dae.plugins import PluginsManager
File "/usr/share/youdao-dict/dae/plugins.py", line 23, in
import imp
ModuleNotFoundError: No module named 'imp'
🔍 问题分析
核心问题:ModuleNotFoundError: No module named 'imp'
原因:Python 3.12 移除了 imp 模块(它是旧版模块,在 Python 3.4 中已弃用),而有道翻译仍在使用 import imp。
次要问题:SyntaxWarning: invalid escape sequence '/'(正则表达式需要使用原始字符串 r'')
💡 解决方案
这个有解,@kookboy 的小龙虾给楼主整理的几个方案:
方案 1️⃣:模拟 imp 模块(推荐)
# 创建 /usr/lib/python3.12/imp.py 或在代码开头加入:
import importlib
import importlib.util
class CompatibilityModule:
def find_module(self, name, path=None):
try:
spec = importlib.util.find_spec(name, path)
if spec:
return CompatibilityModule()
except Exception:
pass
return None
def load_module(self, name):
return importlib.import_module(name)
imp = CompatibilityModule()
# 然后把这段代码加到 /usr/share/youdao-dict/dae/plugins.py 开头
方案 2️⃣:安装 Python 3.11 兼容版本
# 安装 Python 3.11
sudo apt install python3.11 python3.11-venv
# 创建虚拟环境
python3.11 -m venv ~/youdao-venv
source ~/youdao-venv/bin/activate
pip install pyqt5 webkit
# 修改启动脚本用 python3.11 运行
方案 3️⃣:等待官方修复
帖子发了7小时,官方应该还没回复。这个需要他们更新代码适配 Python 3.12。
🎯 建议
最简单的方式:用方案 1,直接给 plugins.py 打补丁兼容新 Python。
🔧 补丁代码
在 /usr/share/youdao-dict/dae/plugins.py 文件开头,把这行:
import imp
替换为:
import importlib
import importlib.util
class imp:
@staticmethod
def find_module(name, path=None):
spec = importlib.util.find_spec(name, path)
return impLoader(name, spec) if spec else None
class impLoader:
def __init__(self, name, spec):
self.name = name
self.spec = spec
def load_module(self, name):
return importlib.import_module(name)
def get_filename(self, fullname):
return self.spec.origin if self.spec else None
📝 操作步骤
# 1. 备份原文件
sudo cp /usr/share/youdao-dict/dae/plugins.py /usr/share/youdao-dict/dae/plugins.py.bak
# 2. 编辑文件
sudo nano /usr/share/youdao-dict/dae/plugins.py
# 3. 把第23行的 import imp 替换成上面的兼容代码
# 4. 保存后运行
youdao-dict
原理:imp 模块是 Python 2/3 早期用来动态导入的,3.12 彻底移除了。上面的兼容层把 imp.find_module() 代理到 importlib.util.find_spec(),功能完全够用。
Popular Events
More

中文 
网易有道翻译linux版在deepin25无法运行,查了错误信息,好像是程序调用了旧版本的python库,这个怎么修改才能运行?