简体   繁体   中英

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?

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?

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.

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.

This works for me:

import sys

sys.path[0]=''

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM