Zenvega
Zenvega

Reputation: 2054

python module import issues in command prompt

I have installed some python packages which I am able to access using IDLE and not through command shell window.

Here is the output from IDLE:

Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
[GCC 4.6.1] on linux2
Type "copyright", "credits" or "license()" for more information.
==== No Subprocess ====
>>> import whoosh

Here is the output from my terminal:

pradeep@ubuntu:~$ python
Python 2.7.2 (default, Nov 28 2011, 23:56:33) 
[GCC 4.6.1] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>> import whoosh
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named whoosh

How can I point the terminal python to IDLE python packages? Why is terminal showing 'linux3' where as IDLE showing 'linux2'? Please help me with this path issue. thanks.

Update1:

Thanks all. Like most of you guessed, I have two different versions installed.

My Idle Path shows

['/home/pradeep', '/usr/bin', '/usr/local/lib/python2.7/dist-packages/Whoosh-2.3.0-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

My terminal path shows:

['', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-linux3', '/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']

How do I remove the terminal version and install IDLE version in terminal? Thanks.

Upvotes: 2

Views: 16869

Answers (4)

Matt Alcock
Matt Alcock

Reputation: 12901

This is due to path issues. I would recommend using virtual envs and pip as standard when working with packages you've imported or obatined externally.

Some great notes here: https://python-guide.readthedocs.org/en/latest/

Hope this helps.

Upvotes: 0

Raymond Hettinger
Raymond Hettinger

Reputation: 226734

You're running two different Python installs, one dated 10/4/2011 and the other dated 11/28/2011. The second one doesn't have whoosh installed.

Your options are:

  1. Look for the version that IDLE uses and run it from the command-line. To find it, turn on IDLE and run import sys; print sys.executable. That will show you the location of the version with the packages installed.

  2. Or you can beef-up your command-line version by installing those same packages at the command-line (i.e. run python setup.py install for the various packages you want to load.

Upvotes: 3

Jon Egeland
Jon Egeland

Reputation: 12623

You need to make sure PYTHONPATH is set correctly in your ~/.profile or /usr/<user-name>/.profile.

For example (this is for OS X, but just find where Python is installed on your machine):

export PYTHONPATH="/usr/local/lib/python2.7/site-package/:$PYTHONPATH"

Only OS X requires the export prefix, and you can check your current path using echo $PYTHONPATH in terminal.

Once you've changed PYTHONPATH to point to your version of python's package folder, you need to force terminal to update the path using this:

source ~/.profile

Then try echo $PYTHONPATH again and make sure it changed. Then you should be set as long as you pointed to the correct directory.

Upvotes: 1

Yugal Jindle
Yugal Jindle

Reputation: 45726

Packages are searched in all the directories defined in the python path.

So, if the IDLE and terminal are working differently - means they have difference in their python paths.

So,

Try this : (On both IDLE and terminal)

import sys
print sys.path  # this prints the list of directories in the python path.

Compare the list that you get from both and the extra directory in IDLE will be having whoosh

You can add directories to sys.path like this :

import sys
sys.path.append('/home/user/packages')

Now, all packages in /home/user/packages will be available for import.

Upvotes: 3

Related Questions