首页 > 解决方案 > 简单的 Mercurial 扩展无法导入

问题描述

我正在尝试遵循编写 Mercurial 扩展的示例代码。这是一个最小的示例,从示例代码中逐字复制:

from mercurial import cmdutil
from mercurial.i18n import _

cmdtable = {}
command = cmdutil.command(cmdtable)

我将其保存到一个文件中,并在我的.hgrc文件中安装扩展,如下所示:

[extensions]
myext=C:\foo\myext.py

任何随后发出的命令,例如hg init现在会导致以下错误消息:

*** 无法从 C:\foo\myext.py 导入扩展 myext:“模块”对象没有属性“命令”

这可能是由错误的环境引起的,例如缺少环境变量吗?

我在 Windows 10 上使用 Mercurial 4.7,由 TortoiseHg 安装程序 (tortoisehg-4.7.0-x64) 安装。Mercurial 使用 Python 2.7.13,也由 TortoiseHg 安装程序安装。

标签: pythonmercurialtortoisehgmercurial-extension

解决方案


看起来文档需要更新。command2016 年 1 月从 移至cmdutilregistrar但当时还保留了一个别名。这在 2017 年 11 月被标记为已弃用,在 2018 年 5 月完全删除

2018 年 8 月的Mercurial 4.7 版本 包括删除的更改cmdutil.command

cmdutil:删除 registrar.command (API) 的弃用前身

这对我有用:

from mercurial import registrar
from mercurial.i18n import _

cmdtable = {}
command = registrar.command(cmdtable)

推荐阅读