Python:导入错误
我在Ubuntu 10.10上运行Python 2.6.6。
我知道我们可以导入一个模块,并把这个模块绑定到一个不同的名字,比如:
import spam as eggs
还有,
from eggs import spam as foo
我的问题是,当我运行PySide示例时,下面的导入代码无法运行:
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解释器,上面的代码是错误的,我想知道为什么它不正确,或者说为什么这段代码不工作?
2 个回答
我刚安装了PySide,并在做一个教程,里面的例子都是用PyQt4的。每次都要把导入的部分从PyQt4改成PySide,我觉得太麻烦了,于是我在我的site-packages目录里做了一个符号链接,步骤如下:
1) 当然有更好的方法,但我通过打开一个命令行窗口,运行python,接着在交互式解释器里输入以下命令,找到了我的Python包安装位置:
>>> import sys
>>> print sys.path
2) 然后我在某个目录里找到了PySide,并进入了那个目录(注意:如果你是在Mac OSX Leopard 10.5.8上用macports安装的Python 2.7的PySide,它的路径是/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages)。
3) 接着我用ln命令创建了一个符号链接,在我的情况下需要用sudo权限:
sudo ln -s PySide PyQt4
就这样,现在我可以直接使用:
from PyQt4 import QtGui
就像平常一样 - 太开心了!
当然,如果你以后想安装PyQt4,记得先删除PyQt4的符号链接。还有一点要注意:我上面说的做法可能在很多方面都是错误或不好的 - 我并不是Python安装方面的专家,但到目前为止对我来说还不错。你的情况可能会不同,所以请自行决定是否使用。希望有人能很快评论说“不是,这样很糟糕!”或者最好是“没事,别担心,我们很好..”
import
和 from
是一种特殊的语法。
它们会查找一个模块名,也就是在 sys.path
中以模块名开头的文件。
看起来你没有安装 PyQt4,所以会出错。
即使你在运行 import PySide as PyQt4
后,命名空间里有一个叫 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
这两种方式应该是等价的。