ImportError: невозможно импортировать имя 'VIServer'
Я использую Python 2.7.6 и Pysphere 0.1.7. Я получаю ошибку в следующем коде:
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()
Ошибка говорит: ImportError: не может импортировать имя '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 - это имя скрипта.
Любая помощь будет доброй;
1 ответ
РЕДАКТИРОВАТЬ: Действительная, но не правильная проблема
если вы уже импортируете пышпере, почему бы не использовать
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), он импортирует ваш файл прежде, чем найдет настоящий!