<p>你最大的问题是索塔普提到的那个。如果实际上没有将<code>app.py</code>作为顶级脚本运行,则没有任何代码调用<code>app.main()</code>,因此没有初始化全局脚本的功能。</p>
<p>除此之外,“如何从另一个模块引用实例”非常简单,如果您知道一件简单的事情:</p>
<p>在Python中,globals是有名称空间的。</p>
<p>更具体地说,在其他模块中,只需<code>import app</code>,然后以<code>app.myapp</code>的形式访问全局。</p>
<p>正如sotapme所解释的,使用<code>__name__ == '__main__'</code>技巧意味着您可以随心所欲地<code>import app</code>多次,而不必每次都运行<code>main()</code>函数。</p>
<p>特别是,运行此命令时:</p>
<pre><code>python app.py
</code></pre>
<p>Python解释器将加载<code>app.py</code>,其<code>__name__</code>设置为<code>'__main__'</code>,因此<code>if</code>语句将触发,这将导致(模块级)全局变量<code>myapp</code>设置为<code>App({})</code>。</p>
<p>现在,当<code>resource.py</code>执行<code>import app</code>时,它的<code>__name__</code>将设置为<code>app</code>,因此<code>if</code>语句将<em>而不是</em>触发器,因此您将构造一个新的<code>App</code>并替换全局触发器。从<code>resource.py</code>中的代码中,您可以使用<code>app.myapp</code>,并且您将访问<code>app.py</code>中的代码视为<code>myapp</code>的同一对象。</p>
<hr/>
<p>您还需要帮助才能将配置传递给<code>App</code>构造函数。我不知道你有什么问题。您正在传递一个空的<code>dict</code>作为配置。如果您有不同的<code>dict</code>要传递,请使用它。而不是这个:</p>
<pre><code>myapp = App({}) # Could use help here, how to pass config to it
</code></pre>
<p>执行以下操作:</p>
<pre><code>myapp = App(configdict)
</code></pre>
<p>如果你的问题是知道如何获取信息,那取决于信息的来源。</p>
<p>如果您试图解析用户可编辑的配置文件,<a href="http://docs.python.org/2/library/configparser.html" rel="nofollow">^{<cd28>}</a>模块对传统的.ini样式文件很好,并且文档中有一些链接,可以解释如何处理其他一些流行格式。</p>
<p>如果您试图从命令行建立配置信息,请参见<a href="http://docs.python.org/2/library/argparse.html" rel="nofollow">^{<cd29>}</a>。</p>
<p>如果您希望允许环境变量与上述任何一个变量交互(例如,<code>MYAPP_CONFIG</code>可能会告诉您的<code>configparser</code>代码加载一个与普通配置文件不同的配置文件,或者<code>MYAPP_CACHE_DIR</code>可能会为<code>--cachedir</code>的命令行参数提供不同的默认值,<code>argparse</code>),您将获得<a href="http://docs.python.org/2/library/os.html#os.environ" rel="nofollow">^{<cd35>}</a>中的值,但是你必须自己写代码来处理它们。</p>