Reputation: 694
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"
Upvotes: 6
Views: 8703
Reputation: 50557
You could use relative imports:
from . import math
http://docs.python.org/tutorial/modules.html#intra-package-references
Upvotes: 3
Reputation: 994331
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.
Upvotes: 3