Import Local module over global python

2019-02-24 00:16发布

问题:

I have a 2 python files. One is trying to import the second. My problem is that the second is named math.py. I can not rename it. When I attempt to call a function that is located inside math.py, I can not because I end up with the global math module. How would I import my local file instead of the global. I am using Python 2.7, and this is(roughly) my import statment:

cstr = "math"
command = __import__(cstr)

Later I try:

command.in_math_py_not_global()

Edit: a more complete example:

def parse(self,string):
    clist = string.split(" ")
    cstr= clist[0]
    args = clist[1:len(clist)]
    rvals = []
    try:
        command = __import__(cstr)
        try:
            rvals.extend(command.main(args))
        except:
            print sys.exc_info()
    except ImportError:
        print "Command not valid"

回答1:

Python processes have a single namespace of loaded modules. If you (or any other module) has already loaded the standard math module for any reason, then trying to load it again with import or __import__() will simply return a reference to the already-loaded module. You should be able to verify this using print id(math) and comparing with print id(command).

Although you've stated that you are unable to change the name of math.py, I suggest you can. You are getting the name of the module to load from the user. You can modify this before actually using the __import__() function to add a prefix. For example:

command = __import__("cmd_" + cstr)

Then, rename math.py to cmd_math.py and you will avoid this conflict.



回答2:

You could use relative imports:

from . import math

http://docs.python.org/tutorial/modules.html#intra-package-references