python - 如何在六个中添加自定义重命名?

标签 python six

根据文档,六个支持adding custom renamessix.moves :

six.add_move(item)

Add item to the six.moves mapping. item should be a MovedAttribute or MovedModule instance.

和:

class six.MovedModule(name, old_mod, new_mod)

Create a mapping for six.moves called name that references different modules in Python 2 and 3. old_mod is the name of the Python 2 module. new_mod is the name of the Python 3 module.

然而,这段代码为我产生了一个ImportError:

from six import add_move, MovedModule
add_move(MovedModule('mock', 'mock', 'unittest.mock'))
from six.moves.mock import MagicMock

当我使用 6 个 1.9.0 在 Python 3.4.2 上运行它时,出现此错误:

Traceback (most recent call last):
  File "test_six_moves.py", line 2, in <module>
    from six.moves.mock import MagicMock
ImportError: No module named 'six.moves.mock'

内置 Action 运行良好。我如何让它发挥作用?

最佳答案

您不能从移动中导入名称。使用:

from __future__ import print_function

from six import add_move, MovedModule
add_move(MovedModule('mock', 'mock', 'unittest.mock'))

from six.moves import mock
print(mock.MagicMock)

这会给你:

# Python 2
<class 'mock.MagicMock'>

# Python 3
<class 'unittest.mock.MagicMock'>

请注意,从移动中导入适用于随 6 一起提供的移动。例如:from six.moves.configparser import ConfigParser 有效。

这段代码(来自 six.py )是为什么:

for attr in _moved_attributes:
    setattr(_MovedItems, attr.name, attr)
    if isinstance(attr, MovedModule):
        _importer._add_module(attr, "moves." + attr.name)

事实上,如果您运行以下命令(当然不建议干预私有(private)属性),您的导入将起作用:

import six
mod = six.MovedModule('mock', 'mock', 'unittest.mock')
six.add_move(mod)
six._importer._add_module(mod, "moves." + mod.name)

关于python - 如何在六个中添加自定义重命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215214/

相关文章:

linux - 32 位 Linux 上的 PyInstaller - ImportError : The 'six' package is required

python - pip 和操作系统之间的软件包版本差异?

PyCharm from Six.moves 导入队列 : unresolved reference 'queue'

python - 刮痧 : AttributeError: 'list' object has no attribute 'iteritems'

python - 在 Python 中导入 Statsmodel 时出错

python 包 - 是否包含测试套件

python - Pandas :仅将数据框中的数字转换为数字,保留其他所有内容

Python:如何为单元测试模拟kafka主题?

python - 将 numpy.ndarray 写入 xlsx 电子表格