2011-06-18 105 views

回答

10

实际上,这是可能的(此代码没有很好的测试,但似乎工作)。

文件foo.py

print "foo module loaded" 

文件foo/__init__.py

print "foo package loaded" 

文件test1.py

import foo 

文件test2.py

import os, imp 

def import_module(dir, name): 
    """ load a module (not a package) with a given name 
     from the specified directory 
    """ 
    for description in imp.get_suffixes(): 
     (suffix, mode, type) = description 
     if not suffix.startswith('.py'): continue 
     abs_path = os.path.join(dir, name + suffix) 
     if not os.path.exists(abs_path): continue 
     fh = open(abs_path) 
     return imp.load_module(name, fh, abs_path, (description)) 

import_module('.', 'foo') 

运行

$ python test1.py 
foo package loaded 

$ python test2.py 
foo module loaded 
7

也许你想你的类从foo.py模块移动到__init__.py

这样,你就可以从包中导入,以及导入可选子包:

文件foo/__init__.py

class Bar(object): 
... 

文件mymodule.py

from foo import Bar 
from foo.subfoo import ... 

不过我希望有人对此方法进行仔细检查,并让我知道它是否正确或模块不应该是像那样使用。

+2

我想知道是否可以这样做。 – Parham

+2

Lennart Regebro在另一个答案中推荐它,所以它没关系:http://stackoverflow.com/a/17530651/992687 –

相关问题