Согласно документации, шесть опор adding custom renames к six.moves
:Как добавить пользовательские переименования в шесть?
six.add_move(item)
Add item to the
six.moves
mapping. item should be aMovedAttribute
orMovedModule
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
Когда я запускаю его на Python 3.4.2 с использованием шести 1.9.0 Я получаю эту ошибку:
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'
Встроенные ходы работают нормально. Как мне заставить это работать?
Ах спасибо, тот факт, что импорт изнутри ходов работает для встроенных, меня смутил. –
@ BjörnPollex Это действительно немного запутанно, что 'add_move' не делает этого для вас. Я уверен, что есть причина, хотя я точно не знаю, что это такое. –
Не могу использовать 'from six.moves.mock import Mock' действительно беспокоить меня. До сегодняшнего дня я использовал структуру пакетов, такую как 'portability.mock', и в' mock' копировал весь макет модуля 'from six.moves.mock import *'. Сделайте копию даже хуже, и я действительно испытываю соблазн использовать личный доступ '_importer' ... просто примечание: на ubuntu 14,04 python 3 поставляется с' six' 1.5.2, и этот трюк не работает –