擅长:python、mysql、java
<p>受extraneon和taherh的答案启发,这里有一些代码在文件树上运行,直到它用完构建完整包名的<code>__init__.py</code>文件。这绝对是一个黑客,但似乎不管文件在目录树中的深度如何,都可以工作。似乎绝对进口受到了极大的鼓励。</p>
<pre><code>import os, sys
if __name__ == "__main__" and __package__ is None:
d,f = os.path.split(os.path.abspath(__file__))
f = os.path.splitext(f)[0]
__package__ = [f] #__package__ will be a reversed list of package name parts
while os.path.exists(os.path.join(d,'__init__.py')): #go up until we run out of __init__.py files
d,name = os.path.split(d) #pull of a lowest level directory name
__package__.append(name) #add it to the package parts list
__package__ = ".".join(reversed(__package__)) #create the full package name
mod = __import__(__package__) #this assumes the top level package is in your $PYTHONPATH
sys.modules[__package__] = mod #add to modules
</code></pre>