Mustafa Khattab
Mustafa Khattab

Reputation: 33

Python: from import error

I'm running Python 2.6.6 on Ubuntu 10.10.

I understand that we can import a module and bind that module to a different name, e.g.

import spam as eggs

also,

from eggs import spam as foo

My problem is that when running the PySide examples, the following import code does not run:

import PySide as PyQt4
from PyQt4 import QtCore, QtGui

It generates an import error:

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

Clearly, according to the Python interpreter the above code is incorrect, my question is why is it incorrect or rather why doesn't this work?

Upvotes: 3

Views: 5076

Answers (2)

JobJob
JobJob

Reputation: 4127

I just installed PySide and was doing a tutorial where all the examples used PyQt4. I got tired of changing the imports from PyQt4 to PySide so I just made a symlink in my site-packages, using the following steps:

1) There's surely a better way but I found where my python packages were installed by opening a shell and running python, then at the interactive interpreter typed:

>>> import sys

>>> print sys.path

2) I then found PySide in one of the directories and cd'd to it (n.b. It's at /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages if you're using the macports PySide install for python 2.7 on Mac OSX Leopard 10.5.8).

3) Then I made a symlink with ln, in my case I had to use sudo:

sudo ln -s PySide PyQt4

That's it, now I can just use:

from PyQt4 import QtGui

as normal - happy days!

Obviously, if you ever want to install PyQt4 you should rm the PyQt4 symlink first. Another caveat: What I've described above may well be wrong/bad in many ways - I am no expert at Python installs but so far it's ok for me. YMMV so use at your own risk. Hopefully someone will comment soon to say "no, very bad!" or ideally "yeah don't sweat it, we cool.."

Upvotes: 2

Mikel
Mikel

Reputation: 25606

import and from are a special syntax.

They look for a module name, which means a file in sys.path which starts with the module name.

And it seems like you don't have PyQt4 installed, so it will fail.

The fact that you have a variable called PyQt4 in your namespace after running import PySide as PyQt4 does not change anything, Python is still looking for an actual module called PyQt4 when you do from PyQt4 import QtCore, QtGui.

Try doing

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

or

import PySide as PyQt4
from PySide import QtCore, QtGui

That should be equivalent.

Upvotes: 4

Related Questions