导入错误:无法导入名称“VIServer”
问题描述:
我使用python 2.7.6和pysphere 0.1.7.I我得到下面的代码中的错误:导入错误:无法导入名称“VIServer”
import sys
import pysphere
from pysphere import VIServer
server=VIServer()
server.connect(host,login,password)
vm_target=server.get_vm_by_name(guest)
if vm_target.get_status() == 'POWERED OFF':
vm_target.power_on()
while vm_target.is_powering_on():
continue
server.disconnect()
错误说:导入错误:无法导入名称'VIServer'
脚本正试图将文件从本地计算机复制到目标虚拟机。
完整的错误信息是:
Traceback (most recent call last):
File "copy.py", line 4, in <module>
from pysphere import VIServer
File "/usr/local/lib/python2.7/dist-packages/pysphere/__init__.py", line 171, in <module>
from pysphere.vi_task import VITask
File "/usr/local/lib/python2.7/dist-packages/pysphere/vi_task.py", line 34, in <module>
from pysphere.resources import VimService_services as VI
File "/usr/local/lib/python2.7/dist-packages/pysphere/resources/VimService_services.py", line 6, in <module>
from pysphere.resources.VimService_services_types import *
File "/usr/local/lib/python2.7/dist-packages/pysphere/resources/VimService_services_types.py", line 7, in <module>
import pysphere.ZSI
File "/usr/local/lib/python2.7/dist-packages/pysphere/ZSI/__init__.py", line 151, in <module>
from pysphere.ZSI.wstools.Namespaces import ZSI_SCHEMA_URI
File "/usr/local/lib/python2.7/dist-packages/pysphere/ZSI/wstools/__init__.py", line 7, in <module>
from pysphere.ZSI.wstools import WSDLTools
File "/usr/local/lib/python2.7/dist-packages/pysphere/ZSI/wstools/WSDLTools.py", line 15, in <module>
from pysphere.ZSI.wstools.Utility import Collection, CollectionNS, DOM, ElementProxy, basejoin
File "/usr/local/lib/python2.7/dist-packages/pysphere/ZSI/wstools/Utility.py", line 36, in <module>
import xml.dom.minidom
File "/usr/lib/python2.7/xml/dom/minidom.py", line 22, in <module>
from xml.dom.xmlbuilder import DOMImplementationLS, DocumentLS
File "/usr/lib/python2.7/xml/dom/xmlbuilder.py", line 3, in <module>
import copy
File "/home/shasha/devOps/pythonSamples/copy.py", line 4, in <module>
from pysphere import VIServer
ImportError: cannot import name VIServer
copy.py是脚本的名称。
任何帮助将是善良的;
答
编辑:有效但不正确的问题
如果你已经导入pyshpere,为什么不使用
pysphere.VIServer.foo()
如果这是你想要你就必须发布更多的代码不是
它看起来像你命名你的Python脚本copy.py
当您运行from pysphere import VIServer
,是进口的东西长链,直到它到达:
File "/usr/lib/python2.7/xml/dom/xmlbuilder.py", line 3, in <module>
import copy
从这里,Python使用深度优先搜索,找到一个名为copy.py模块,其中可能有多大呢?当然!它就在它的前面。所以现在python重新导入你的模块,因为它被命名为copy.py
。在这里,python意识到某些东西已经非常错误,现在它已经重新导入了已经做过的东西。这是不好的,所以它退出。
如果你想避免这种情况,你需要或者使用
server=pysphere.VIServer()
,或重命名文件,或两者兼而有之。
通常你的文件应该被命名为非常具有描述性的东西,所以重命名可能是最好的方法。只要记住,如果你将它重命名为默认Python语言之外的东西(比如说,我命名了一个脚本MatPlotLib),它会在你找到真正的语言之前导入你的东西!
当你删除“import pysphere”这一行并且刚刚从'pysphere import VIServer'行删除了这行时会发生什么? – Wolf
@Wolf,它给出了同样的错误; – Shasha99
你能否包含完整的错误信息?你是否将脚本命名为pysphere.py? – M4rtini