[Feedback on issues] 网易有道翻译无法运行
Tofloor
poster avatar
idealstar
deepin
2026-04-08 10:16
Author

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

Reply Favorite View the author
All Replies
大威天龙
deepin
2026-04-08 13:57
#1

终端运行,错误代码截图发下

Reply View the author
大威天龙
deepin
2026-04-08 14:07
#2

不知道你安装的那个版本,常规3个方案:

1、看看库里有没有相关的依赖可以安装。

2、修改有道翻译的启动脚本指定 Python 路径。

3、要是怕系统的python搞坏了,用虚拟环境运行旧版依赖,测试可行后在创建快捷启动脚本。

4、该用其他翻译软件,例如:pot等。或者安装官方版本的linux包试试。

Reply View the author
idealstar
deepin
2026-04-08 14:38
#3
大威天龙

不知道你安装的那个版本,常规3个方案:

1、看看库里有没有相关的依赖可以安装。

2、修改有道翻译的启动脚本指定 Python 路径。

3、要是怕系统的python搞坏了,用虚拟环境运行旧版依赖,测试可行后在创建快捷启动脚本。

4、该用其他翻译软件,例如:pot等。或者安装官方版本的linux包试试。

官网下载的6.0.0版本,星火商店的spark包和apm包都试过,一样的打不开。

Reply View the author
idealstar
deepin
2026-04-08 14:39
#4
大威天龙

终端运行,错误代码截图发下

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'

Reply View the author
kookboy
deepin
2026-04-08 17:27
#5

🔍 问题分析

核心问题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(),功能完全够用。

Reply View the author