Python:导入错误

3 投票
2 回答
5061 浏览
提问于 2025-04-16 12:26

我在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 个回答

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安装方面的专家,但到目前为止对我来说还不错。你的情况可能会不同,所以请自行决定是否使用。希望有人能很快评论说“不是,这样很糟糕!”或者最好是“没事,别担心,我们很好..”

4

importfrom 是一种特殊的语法。

它们会查找一个模块名,也就是在 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

这两种方式应该是等价的。

撰写回答