Reputation: 1697
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
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
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
Reputation: 2958
On UNIX systems and Mac OS-X:
~/.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