uTools-Manuals/docs/python/modulefinder.html
2019-04-21 11:50:48 +08:00

42 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-modulefinder"><h1><span class="yiyi-st" id="yiyi-10">31.3. <a class="reference internal" href="#module-modulefinder" title="modulefinder: Find modules used by a script."><code class="xref py py-mod docutils literal"><span class="pre">modulefinder</span></code></a> — Find modules used by a script</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/modulefinder.py">Lib / modulefinder.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块提供了一个<a class="reference internal" href="#modulefinder.ModuleFinder" title="modulefinder.ModuleFinder"><code class="xref py py-class docutils literal"><span class="pre">ModuleFinder</span></code></a>类,可用于确定由脚本导入的模块集。</span><span class="yiyi-st" id="yiyi-13"><code class="docutils literal"><span class="pre">modulefinder.py</span></code>也可以作为脚本运行将Python脚本的文件名作为其参数之后将导入导入的模块的报告。</span></p><dl class="function"><dt id="modulefinder.AddPackagePath"><span class="yiyi-st" id="yiyi-14"> <code class="descclassname">modulefinder.</code><code class="descname">AddPackagePath</code><span class="sig-paren">(</span><em>pkg_name</em>, <em>path</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-15">记录在指定的<em>路径</em>中可以找到名为<em>pkg_name</em>的包。</span></p></dd></dl><dl class="function"><dt id="modulefinder.ReplacePackage"><span class="yiyi-st" id="yiyi-16"> <code class="descclassname">modulefinder.</code><code class="descname">ReplacePackage</code><span class="sig-paren">(</span><em>oldname</em>, <em>newname</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-17">允许指定名为<em>oldname</em>的模块实际上是名为<em>newname</em>的包。</span></p></dd></dl><dl class="class"><dt id="modulefinder.ModuleFinder"><span class="yiyi-st" id="yiyi-18"> <em class="property">class </em><code class="descclassname">modulefinder.</code><code class="descname">ModuleFinder</code><span class="sig-paren">(</span><em>path=None</em>, <em>debug=0</em>, <em>excludes=[]</em>, <em>replace_paths=[]</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">此类提供<a class="reference internal" href="#modulefinder.ModuleFinder.run_script" title="modulefinder.ModuleFinder.run_script"><code class="xref py py-meth docutils literal"><span class="pre">run_script()</span></code></a><a class="reference internal" href="#modulefinder.ModuleFinder.report" title="modulefinder.ModuleFinder.report"><code class="xref py py-meth docutils literal"><span class="pre">report()</span></code></a>方法来确定由脚本导入的模块集。</span><span class="yiyi-st" id="yiyi-20"><em>path</em>可以是搜索模块的目录列表;如果未指定,则使用<code class="docutils literal"><span class="pre">sys.path</span></code></span><span class="yiyi-st" id="yiyi-21"><em>debug</em>设置调试级别;更高的值使类打印关于它正在做什么的调试消息。</span><span class="yiyi-st" id="yiyi-22"><em>excludes</em>是要从分析中排除的模块名称的列表。</span><span class="yiyi-st" id="yiyi-23"><em>replace_paths</em>是将在模​​块路径中替换的元组的<code class="docutils literal"><span class="pre">oldpath</span> <span class="pre">newpath</span> </code></span></p><dl class="method"><dt id="modulefinder.ModuleFinder.report"><span class="yiyi-st" id="yiyi-24"> <code class="descname">report</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-25">将报告打印到标准输出,其中列出了脚本及其路径导入的模块,以及缺少或似乎缺少的模块。</span></p></dd></dl><dl class="method"><dt id="modulefinder.ModuleFinder.run_script"><span class="yiyi-st" id="yiyi-26"> <code class="descname">run_script</code><span class="sig-paren">(</span><em>pathname</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-27">分析<em>路径名</em>文件的内容该文件必须包含Python代码。</span></p></dd></dl><dl class="attribute"><dt id="modulefinder.ModuleFinder.modules"><span class="yiyi-st" id="yiyi-28"> <code class="descname">modules</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-29">字典映射模块命名为模块。</span><span class="yiyi-st" id="yiyi-30">请参阅<a class="reference internal" href="#modulefinder-example"><span>Example usage of ModuleFinder</span></a></span></p></dd></dl></dd></dl><div class="section" id="example-usage-of-modulefinder"><h2><span class="yiyi-st" id="yiyi-31">31.3.1. </span><span class="yiyi-st" id="yiyi-32">Example usage of <a class="reference internal" href="#modulefinder.ModuleFinder" title="modulefinder.ModuleFinder"><code class="xref py py-class docutils literal"><span class="pre">ModuleFinder</span></code></a></span></h2><p><span class="yiyi-st" id="yiyi-33">稍后将要分析的脚本bacon.py</span></p><pre><code class="language-python"><span></span><span class="kn">import</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">itertools</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">baconhameggs</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">guido.python.ham</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">pass</span>
</code></pre><p><span class="yiyi-st" id="yiyi-34">将输出bacon.py的报告的脚本</span></p><pre><code class="language-python"><span></span><span class="kn">from</span> <span class="nn">modulefinder</span> <span class="k">import</span> <span class="n">ModuleFinder</span>
<span class="n">finder</span> <span class="o">=</span> <span class="n">ModuleFinder</span><span class="p">()</span>
<span class="n">finder</span><span class="o">.</span><span class="n">run_script</span><span class="p">(</span><span class="s1">'bacon.py'</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Loaded modules:'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">finder</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">: '</span> <span class="o">%</span> <span class="n">name</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">','</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">mod</span><span class="o">.</span><span class="n">globalnames</span><span class="o">.</span><span class="n">keys</span><span class="p">())[:</span><span class="mi">3</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'-'</span><span class="o">*</span><span class="mi">50</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Modules not imported:'</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">finder</span><span class="o">.</span><span class="n">badmodules</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
</code></pre><p><span class="yiyi-st" id="yiyi-35">样本输出(可能因架构而异):</span></p><pre><code class="language-python"><span></span><span class="n">Loaded</span> <span class="n">modules</span><span class="p">:</span>
<span class="n">_types</span><span class="p">:</span>
<span class="n">copyreg</span><span class="p">:</span> <span class="n">_inverted_registry</span><span class="p">,</span><span class="n">_slotnames</span><span class="p">,</span><span class="n">__all__</span>
<span class="n">sre_compile</span><span class="p">:</span> <span class="n">isstring</span><span class="p">,</span><span class="n">_sre</span><span class="p">,</span><span class="n">_optimize_unicode</span>
<span class="n">_sre</span><span class="p">:</span>
<span class="n">sre_constants</span><span class="p">:</span> <span class="n">REPEAT_ONE</span><span class="p">,</span><span class="n">makedict</span><span class="p">,</span><span class="n">AT_END_LINE</span>
<span class="n">sys</span><span class="p">:</span>
<span class="n">re</span><span class="p">:</span> <span class="n">__module__</span><span class="p">,</span><span class="n">finditer</span><span class="p">,</span><span class="n">_expand</span>
<span class="n">itertools</span><span class="p">:</span>
<span class="n">__main__</span><span class="p">:</span> <span class="n">re</span><span class="p">,</span><span class="n">itertools</span><span class="p">,</span><span class="n">baconhameggs</span>
<span class="n">sre_parse</span><span class="p">:</span> <span class="n">_PATTERNENDERS</span><span class="p">,</span><span class="n">SRE_FLAG_UNICODE</span>
<span class="n">array</span><span class="p">:</span>
<span class="n">types</span><span class="p">:</span> <span class="n">__module__</span><span class="p">,</span><span class="n">IntType</span><span class="p">,</span><span class="n">TypeType</span>
<span class="o">---------------------------------------------------</span>
<span class="n">Modules</span> <span class="ow">not</span> <span class="n">imported</span><span class="p">:</span>
<span class="n">guido</span><span class="o">.</span><span class="n">python</span><span class="o">.</span><span class="n">ham</span>
<span class="n">baconhameggs</span>
</code></pre></div></div></div>