2011-02-24 52 views
3

我在Ubuntu 10.10上运行Python 2.6.6。Python:from import error

据我所知,我们可以导入一个模块并将该模块绑定到不同的名称,例如,

import spam as eggs 

from eggs import spam as foo 

我的问题是,在运行PySide examples时,下面的导入代码不运行:

import PySide as PyQt4 
from PyQt4 import QtCore, QtGui 

它生成一个导入错误:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named PyQt4 

显然,根据Python解释器,上面的代码是不正确的,我的问题是为什么它不正确,或者为什么这不工作?

回答

4

importfrom是一种特殊的语法。

他们寻找一个模块名称,这意味着一个文件在sys.path以模块名称开头。

而且好像你没有安装PyQt4,所以它会失败。

,你有一个在你的命名空间称为PyQt4运行import PySide as PyQt4不会改变任何东西后变量,Python是还在寻找所谓PyQt4当你做from PyQt4 import QtCore, QtGui实际模块的事实。

尝试做

import PySide as PyQt4 
QtCore = PyQt4.QtCore 
QtGui = PyQt4.QtGui 

import PySide as PyQt4 
from PySide import QtCore, QtGui 

这应该是等价的。

+0

谢谢,你说得对,PyQt4是实际的模块。尽管我应该知道得更清楚,但它并没有跨越我的想法。我只是想知道为什么PySide开发人员决定以这种方式编写他们的导入声明。无论如何,谢谢。 – 2011-02-24 01:34:44

+0

也许他们开发了'PyQt4'的例子,或者复制了'PyQt4'项目中的一些演示。看看http://gitorious.org/pyside-examples/pyside-examples/blobs/master/examples/demos/README。这一切都指“PyQt4”。 – Mikel 2011-02-24 01:47:22

2

我刚刚安装了PySide,并正在做一个教程,其中所有的例子都使用了PyQt4。我厌倦了从PyQt4进口到PySide,所以我只是在我的网站包中使用以下步骤制作符号链接:

1)肯定有更好的方法,但我发现我的python软件包的安装位置是通过打开外壳和运行蟒蛇,然后在交互式解释器中键入:

>>> import sys 

>>> print sys.path 

2)然后,我发现PySide在一个目录中,并cd'd它(注:这是一个在/选择/本地/库/框架/ Python.framework/Versions/2.7/lib/python2.7/site-packages,如果你在Mac OSX Leopard 10.5.8上使用macports PySide for python 2.7安装)。

3)然后我做了LN一个符号,在我的情况,我不得不使用sudo:

sudo ln -s PySide PyQt4 

就是这样,现在我可以只使用:

from PyQt4 import QtGui 

正常 - 快乐天!

很明显,如果你想安装PyQt4,你应该首先使用PyQt4符号链接。 另一个警告:我上面描述的可能在很多方面都是错误/不好的 - 我不是Python安装的专家,但到目前为止对我来说没有问题。 YMMV的使用风险自负。希望有人会很快发表评论,说“不,非常糟糕!”或理想的“是啊,不要汗流,背,我们很酷......”