1

xvfbwrapper 需要 python2.7 或更高版本。

我有一个执行此操作的脚本:

from xvfbwrapper import Xvfb

我安装了 python2.7 作为 python 的替代安装,因为我的操作系统(centOS 6.4)需要 2.6。当我像这样运行脚本时:

python2.7 some_script.py

我收到此错误:

ImportError: cannot import name Xvfb

这让我感到困惑,因为正确版本的 python 正在执行脚本。似乎导入的模块正在尝试使用系统版本。如果我将 python 可执行文件从 /usr/local/bin/python2.7 更改为 /usr/local/bin/python,如果我确保没有字节,我可以打开控制台并运行相同的导入语句而不会出现错误代码从以前失败的执行中编译的模块文件,可能出于任何原因使用 python2.6 编译。

这似乎是一个路径问题,所以我尝试将 /usr/local/bin 放在 PATH 的顶​​部并将 python2.7 的名称更改为 python 但没有骰子。

关于正在发生的事情有什么想法吗?我正在拔头发试图弄清楚这一点。

非常感谢。

更新:

xvfbwrapper 安装有:

pip-2.7 install xvfbwrapper

virtualenv 也存在同样的问题。*在以下示例中, some_script.py 只是一个导入语句:

""" some_script.py """
from xvfbwrapper import Xvfb

我运行了以下命令:

$ virtualenv --no-site-packages --python=/usr/local/bin/python2.7 venv
$ source ./venv/bin/activate
$ pip install xvfbwrapper
$ python -v some_script.py

部分输出:

import xvfbwrapper # directory /home/projects/process/venv/lib/python2.7/site-packages/xvfbwrapper
# /home/projects/process/venv/lib/python2.7/site-packages/xvfbwrapper/__init__.pyc matches        /home/projects/process/venv/lib/python2.7/site-packages/xvfbwrapper/__init__.py
import xvfbwrapper # precompiled from /home/projects/process/venv/lib/python2.7/site-packages/xvfbwrapper/__init__.pyc
Traceback (most recent call last):
File "some_script.py", line 2, in <module>
    from xvfbwrapper import Xvfb
ImportError: cannot import name Xvfb

确切的 python 版本是 2.7.3 xvfbwrapper 模块肯定定义了 Xvfb 类。我在不同的系统上使用相同的模块没有任何问题,它是相同的版本。(xvfbwrapper 版本 0.2.3)

为了提供更多关于奇怪性质的背景信息:我可以在上述虚拟环境中运行 python 控制台并成功执行相同的命令。

更新:

python2.7 -c "import sys; print sys.path"

命令输出(*这是系统 python,而不是 virtualenv):

['',
'/usr/local/lib/python2.7/site-packages/supervisor-3.0-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/pip-1.4.1-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/virtualenv-1.10.1-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/distribute-0.7.3-py2.7.egg', 
'/usr/local/lib/python2.7/site-packages/setuptools-1.1.6-py2.7.egg', 
'/usr/local/lib/python27.zip', 
'/usr/local/lib/python2.7', 
'/usr/local/lib/python2.7/plat-linux2', 
'/usr/local/lib/python2.7/lib-tk', 
'/usr/local/lib/python2.7/lib-old', 
'/usr/local/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/site-packages']

在创建的 virtualenv 中:

['', 
'/home/projects/process/venv/lib/python27.zip', 
'/home/projects/process/venv/lib/python2.7', 
'/home/projects/process/venv/lib/python2.7/plat-linux2', 
'/home/projects/process/venv/lib/python2.7/lib-tk',     
'/home/projects/process/venv/lib/python2.7/lib-old', 
'/home/projects/process/venv/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7', 
'/usr/local/lib/python2.7/plat-linux2', 
'/usr/local/lib/python2.7/lib-tk', 
'/home/projects/process/venv/lib/python2.7/site-packages']
4

2 回答 2

1

xvfbwrapper 0.2.3 版包含导致问题的错误。

(对不起,当我早些时候检查系统上的版本时,我一定是不小心从终端检查了同一台计算机......我有时会这样做......)

我联系了作者,他慷慨地修复了这个错误并发布了 PyPi 0.2.4 版本,它应该可以按预期工作。

我的其他系统上的版本是 xvfbwrapper v0.2.2

于 2013-10-08T17:56:34.033 回答
1

确保您安装xvfbwrapper在 Python 2.7 下;为此,需要有类似easy_install-2.7pip-2.7可执行文件之类的东西。如果您只是这样做sudo easy_install xvfbwrapper(或sudo pip install xvfbwrapper),那么只有 Python 2.6 才有该包可用。

但是,更好的选择是使用virtualenv(或Conda):

$ virtualenv --python=/usr/local/bin/python2.7 myproject
$ . myproject/bin/activate
$ pip install xvfbwrapper
$ python yourcode.py

另见:http: //virtualenvwrapper.readthedocs.org/en/latest/

于 2013-10-05T09:00:30.763 回答