Dan
Dan

Reputation: 1697

Python importing modules differently when run interactively/non-interactively

One of my Python scripts runs in interactive mode but fails when run from the command line. The difference is that when run from the command line, it imports modules from a bad .egg file, and when run interactively it uses my fixed (unzipped) version in the current directory.

My question is two-fold: a) why does Python load modules differently when run from these locations, and b) what are my options to work around it?

Upvotes: 5

Views: 2943

Answers (4)

Dima
Dima

Reputation: 1

This works for me:

import sys

sys.path[0]=''

Upvotes: 0

LNK2019
LNK2019

Reputation: 695

a) why does Python load modules differently when run from these locations b) what are my options to work around it?

Check your environment variable PYTHONPATH. When python imports module, it searches those directories. One way to get around your problem is to add your local folder "the (unzipped) version in the current directory" to the beginning of PYTHONPATH so that python will find it first.

Upvotes: 1

Denis Otkidach
Denis Otkidach

Reputation: 33250

I don't understand what do you mean by running script in interactive mode, so I can't say exactly. But the first place to look for modules (sys.path[0]) in interactive mode is current directory (even calling os.chdir() will affect imports), while for script it's directory where the script is located (derived from sys.argv[0]). Note that they are effectively the same when script is run from directory where it's located, but could be different in other cases. Hope this helps.

Upvotes: 3

fviktor
fviktor

Reputation: 2958

On UNIX systems and Mac OS-X:

  • Do you have a ~/.python-eggs directory?

OS independent:

  • Are you sure that you use the same Python instance in both cases?

  • Can you print sys.path in each cases and see which package directory comes first on your module search path?

Upvotes: 2

Related Questions