ImportError: cannot import name getoutput
ImportError: cannot import name getoutput
我正在使用 future
将代码从 Python 2 移植到 Python 3。
未来化 getoutput
后,导入从
更改
from commands import getoutput
到 from subprocess import getoutput
我的代码使用 getoutput
来测试需求文件。
但是,当我运行测试时,出现以下错误:
from subprocess import getoutput
ImportError: cannot import name getoutput
如何避免这种情况?或者是否有任何其他替代方案可用于将 getoutput
从 Python2 未来化为 Python3
您可以使用具有 major
属性的 sys.version_info
对象获取 Python 安装的主要版本。然后,您可以检查此值以查看您是 运行ning on Python 2 还是 Python 3+。
import sys
if sys.version_info.major == 2:
from commands import getoutput
else:
from subprocess import getoutput
如果条件导入和其他简单语句很少,这将起作用。否则,您可以查看像 six
这样的兼容性包,它通过为您提供某些层来让您 运行 在 2 和 3 中编写代码。六包含一个模块 six.moves
,其中包含 six.moves.getoutput
,它将正确解析 getoutput
。 (相当于2.7中的commands.getoutput
和3+中的subprocess.getoutput
)。
另一种选择是在您的导入周围使用 try-except 块,让它自行解析。
try:
from subprocess import getoutput
except ImportError:
from commands import getoutput
我看到我缺少安装别名语句:
from future import standard_library
standard_library.install_aliases()
from subprocess import getoutput
但是,这给出了 PEP-8
错误:Module level import not at top of file
所以我使用 future.moves
代替:
from future.moves.subprocess import getoutput
而且有效。
我正在使用 future
将代码从 Python 2 移植到 Python 3。
未来化 getoutput
后,导入从
from commands import getoutput
到 from subprocess import getoutput
我的代码使用 getoutput
来测试需求文件。
但是,当我运行测试时,出现以下错误:
from subprocess import getoutput
ImportError: cannot import name getoutput
如何避免这种情况?或者是否有任何其他替代方案可用于将 getoutput
从 Python2 未来化为 Python3
您可以使用具有 major
属性的 sys.version_info
对象获取 Python 安装的主要版本。然后,您可以检查此值以查看您是 运行ning on Python 2 还是 Python 3+。
import sys
if sys.version_info.major == 2:
from commands import getoutput
else:
from subprocess import getoutput
如果条件导入和其他简单语句很少,这将起作用。否则,您可以查看像 six
这样的兼容性包,它通过为您提供某些层来让您 运行 在 2 和 3 中编写代码。六包含一个模块 six.moves
,其中包含 six.moves.getoutput
,它将正确解析 getoutput
。 (相当于2.7中的commands.getoutput
和3+中的subprocess.getoutput
)。
另一种选择是在您的导入周围使用 try-except 块,让它自行解析。
try:
from subprocess import getoutput
except ImportError:
from commands import getoutput
我看到我缺少安装别名语句:
from future import standard_library
standard_library.install_aliases()
from subprocess import getoutput
但是,这给出了 PEP-8
错误:Module level import not at top of file
所以我使用 future.moves
代替:
from future.moves.subprocess import getoutput
而且有效。