Odoo 10.0导入UNALTERABLE_COUNTRIES失败(ImportError)求解决
解决Odoo 10.0访问/web/database/selector时的500导入错误
你碰到的这个500错误核心原因很明确:l10n_fr_pos_cert模块尝试从l10n_fr_certification模块的res_company文件里导入UNALTERABLE_COUNTRIES常量,但这个常量要么不存在,要么导入路径出了问题。从报错栈能直接看到关键错误:
ImportError: cannot import name UNALTERABLE_COUNTRIES
问题根源分析
这种导入失败通常逃不开这几个情况:
- 版本不兼容:你安装的
l10n_fr_pos_cert和l10n_fr_certification模块版本和Odoo 10.0不匹配,比如高版本的l10n_fr_certification已经移除或重命名了这个常量,但l10n_fr_pos_cert还在按旧逻辑导入。 - 模块安装异常:
l10n_fr_certification模块没安装完整,或者文件被误删、修改过,导致res_company.py里缺失这个常量。 - 导入路径错误:模块的文件结构被改动过,原来的相对导入路径已经失效。
具体解决步骤
1. 确认模块版本适配Odoo 10.0
Odoo的本地化模块对版本要求很严格,必须和主版本完全对应。请检查你用的l10n_fr_pos_cert和l10n_fr_certification是不是专门为Odoo 10.0开发的版本,如果是第三方渠道获取的,建议替换成官方10.0分支的对应模块。
2. 手动修复导入语句
如果确认版本没问题,那可以直接修改l10n_fr_pos_cert的__init__.py文件来解决:
- 打开文件:
/usr/lib/python2.7/dist-packages/odoo/addons/l10n_fr_pos_cert/__init__.py - 找到出错的导入行:
from ..l10n_fr_certification.models.res_company import UNALTERABLE_COUNTRIES - 检查
l10n_fr_certification/models/res_company.py文件:- 如果常量被重命名(比如改成了
UNALTERABLE_COUNTRY_CODES),就把导入语句里的常量名改成新的。 - 如果常量被彻底移除了,那可以直接在
l10n_fr_pos_cert的__init__.py里自己定义这个常量,比如:
然后删掉原来的导入语句就行。UNALTERABLE_COUNTRIES = ['FR']
- 如果常量被重命名(比如改成了
3. 重新安装相关模块
要是上面的方法都不管用,试试彻底重装模块:
- 先卸载两个模块:
odoo.py uninstall -d 你的数据库名 l10n_fr_pos_cert l10n_fr_certification - 下载适配Odoo 10.0的模块版本,放到Odoo的插件路径里。
- 重新安装模块:
odoo.py install -d 你的数据库名 l10n_fr_certification l10n_fr_pos_cert - 重启Odoo服务,再访问
/web/database/selector测试。
完整报错日志参考
2018-01-20 13:11:31,453 7023 INFO ? odoo: Odoo版本10.0 2018-01-20 13:11:31,453 7023 INFO ? odoo: 使用配置文件路径:/home//Documents/Client_Projects//od-config 2018-01-20 13:11:31,453 7023 INFO ? odoo: 插件路径:['/home//.local/share/Odoo/addons/10.0', u'/home//Documents/Client_Projects//odoo/odoo/addons', u'/home//Documents/Client_Projects//odoo/addons', u'/home//Documents/Client_Projects//', '/usr/lib/python2.7/dist-packages/odoo/addons'] 2018-01-20 13:11:31,453 7023 INFO ? odoo: 数据库:default@default:default 2018-01-20 13:11:31,459 7023 INFO ? odoo.service.server: HTTP服务(werkzeug)运行于0.0.0.0:8095 2018-01-20 13:12:05,033 7023 INFO ? odoo.addons.bus.models.bus: Bus.loop监听postgres数据库上的imbus 2018-01-20 13:12:07,425 7023 INFO ? odoo.addons.report.models.report: 将使用/usr/bin/wkhtmltopdf路径下的Wkhtmltopdf二进制文件 2018-01-20 13:12:08,938 7023 WARNING ? odoo.api: odoo.addons.bank_reconciliation_v10.models.account模块中的account_move_line.od_list_journals方法已废弃 2018-01-20 13:12:08,938 7023 WARNING ? odoo.api: odoo.addons.bank_reconciliation_v10.models.account模块中的account_move_line.book_bank_balance方法已废弃 2018-01-20 13:12:08,938 7023 WARNING ? odoo.api: odoo.addons.bank_reconciliation_v10.models.account模块中的account_move_line.od_list_accounts方法已废弃 2018-01-20 13:12:09,586 7023 INFO ? werkzeug: 127.0.0.1 - - [20/Jan/2018 13:12:09] "GET /web/database/selector HTTP/1.1" 500 - 2018-01-20 13:12:09,591 7023 ERROR ? werkzeug: 请求错误: Traceback (最近的调用最后): File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi execute(self.server.app) File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 168, in execute application_iter = app(environ, start_response) File "/home//Documents/Client_Projects/aasons/odoo/odoo/service/server.py", line 250, in app return self.app(e, s) File "/home//Documents/Client_Projects/aasons/odoo/odoo/service/wsgi_server.py", line 184, in application return application_unproxied(environ, start_response) File "/home//Documents/Client_Projects/aasons/odoo/odoo/service/wsgi_server.py", line 170, in application_unproxied result = handler(environ, start_response) File "/home//Documents/Client_Projects/aasons/odoo/odoo/http.py", line 1307, in __call__ self.load_addons() File "/home//Documents/Client_Projects/aasons/odoo/odoo/http.py", line 1328, in load_addons m = __import__('odoo.addons.' + module) File "/home//Documents/Client_Projects/aasons/odoo/odoo/modules/module.py", line 81, in load_module execfile(modfile, new_mod.__dict__) File "/usr/lib/python2.7/dist-packages/odoo/addons/l10n_fr_pos_cert/__init__.py", line 6, in <module> from ..l10n_fr_certification.models.res_company import UNALTERABLE_COUNTRIES ImportError: cannot import name UNALTERABLE_COUNTRIES
内容的提问来源于stack exchange,提问作者user8139609
相关产品推荐
相关产品推荐

