<p>我做了:</p>
<pre><code>foo/
__init__.py
__main__.py
</code></pre>
<p>两个文件是:</p>
<pre><code>import __main__
print('in init')
print('init name',__name__)
</code></pre>
<p>以及</p>
<pre><code>print('main name',__name__)
print('in main')
if __name__=='__main__':
print('in main main block')
</code></pre>
<p>如果我直接运行<code>__main__</code>:</p>
<pre><code>1538:~/mypy$ python foo/__main__.py
('main name', '__main__')
in main
in main main block
</code></pre>
<p>如果我调用目录,它也会执行同样的操作。它不导入<code>__init__.py</code>。</p>
<pre><code>1541:~/mypy$ python foo
('main name', '__main__')
in main
in main main block
</code></pre>
<p>但是从一个shell中,它同时加载两个文件</p>
<pre><code>1542:~/mypy$ python
....
>>> import foo
('main name', 'foo.__main__')
in main
in init
('init name', 'foo')
</code></pre>
<p>但它没有使用<code>__main__</code>的<code>if __name__</code>块-名称不对,现在是<code>foo.__main__</code>。</p>
<hr/>
<p>相关文件</p>
<p><a href="https://docs.python.org/2/using/cmdline.html#interface-options" rel="nofollow noreferrer">https://docs.python.org/2/using/cmdline.html#interface-options</a></p>
<blockquote>
<p>Execute the Python code contained in script, which must be a filesystem path (absolute or relative) referring to either a Python file, a directory containing a <code>__main__.py</code> file, or a zipfile containing a <code>__main__.py</code> file.</p>
</blockquote>
<p><a href="https://docs.python.org/2/library/__main__.html" rel="nofollow noreferrer">https://docs.python.org/2/library/__main__.html</a></p>
<blockquote>
<p>This module represents the (otherwise anonymous) scope in which the interpreter’s main program executes — commands read either from standard input, from a script file, or from an interactive prompt. It is this environment in which the idiomatic “conditional script” stanza causes a script to run:</p>
</blockquote>
<hr/>
<p>我用<code>__init__.py</code>创建了另一个目录,但没有主目录:</p>
<pre><code>1558:~/mypy$ python foo1
/usr/bin/python: can't find '__main__' module in 'foo1'
1558:~/mypy$ python
...
>>> import foo1
('in init', 'foo1')
>>>
</code></pre>
<p><code>import</code>可以,但我不能<code>run</code>目录。</p>