mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 15:04:05 +08:00
42 lines
10 KiB
HTML
42 lines
10 KiB
HTML
<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> |