pyvirtualdisplay ImportError: cannot import name Display

pyvirtualdisplay ImportError: cannot import name Display

我的Ubuntu

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:    14.04
Codename:   trusty

我的Xvfb

$ apt --installed list | grep xvfb
xvfb/trusty-updates,trusty-security,now 2:1.15.1-0ubuntu2.7 amd64 [installed]

我的python

python --version
Python 2.7.6

我的档案

$more pyvirtualdisplay.py

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

当我运行它

$ python pyvirtualdisplay.py

Traceback (most recent call last):
  File "pyvirtualdisplay.py", line 3, in <module>
    from pyvirtualdisplay import Display
  File "/root/pyvirtualdisplay.py", line 3, in <module>
    from pyvirtualdisplay import Display
ImportError: cannot import name Display

PyVirtualDisplay

$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip list | grep PyVirtual
PyVirtualDisplay (0.2)

问题是您从未在代码中定义 Display。您的 python 代码的名称与名为 pyvirtualdisplay.

的模块名称一致

您的 python 代码的文件名为 pyvirtualdisplay.py,您还尝试从名为 pyvirtualdisplay.

的模块导入

正如您从 pyvirtualdisplay.py 中看到的那样,没有在任何地方定义名称为 Display 的函数。

Python 按顺序使用以下搜索路径查找您要导入的模块:

  1. 程序的主目录

  2. 环境变量中的目录PYTHONPATH

  3. 标准图书馆目录

  4. 任何 .pth 个文件的内容

因此,在您的情况下,python 正在尝试在与您 运行 您的 pyvirtualdisplay.py 相同的目录中搜索,并且它能够找到名称为 [=11 的文件=].因此,python 尝试在 pyvirtualdisplay.py(您自己的代码)中搜索 Display,因此无法找到任何相关内容。这就是它抱怨的原因 cannot import name Display.

我的建议是您可以将 python 代码的名称更改为其他名称,例如pyvirtualdisplays.py 这样就可以了。