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

8 lines
20 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-compileall"><h1><span class="yiyi-st" id="yiyi-10">32.11. <a class="reference internal" href="#module-compileall" title="compileall: Tools for byte-compiling all Python source files in a directory tree."><code class="xref py py-mod docutils literal"><span class="pre">compileall</span></code></a> - 字节编译Python库</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/compileall.py">Lib / compileall.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块提供一些实用程序功能以支持安装Python库。</span><span class="yiyi-st" id="yiyi-13">这些函数在目录树中编译Python源文件。</span><span class="yiyi-st" id="yiyi-14">此模块可用于在库安装时创建缓存的字节代码文件,这使得即使对没有库目录的写权限的用户也可以使用它。</span></p><div class="section" id="command-line-use"><h2><span class="yiyi-st" id="yiyi-15">32.11.1. </span><span class="yiyi-st" id="yiyi-16">命令行使用</span></h2><p><span class="yiyi-st" id="yiyi-17">这个模块可以作为一个脚本(使用<strong class="program">python -m compileall</strong>来编译Python源代码。</span></p><dl class="cmdoption"><dt id="cmdoption-compileall-arg-directory"><span class="yiyi-st" id="yiyi-18"> <code class="descname">directory</code><code class="descclassname"> ...</code></span></dt><dt id="cmdoption-compileall-arg-file"><span class="yiyi-st" id="yiyi-19"> <code class="descname">file</code><code class="descclassname"> ...</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-20">位置参数是要编译的文件或包含源文件的目录,以递归方式遍历。</span><span class="yiyi-st" id="yiyi-21">如果没有给出参数,表现为命令行为<code class="docutils literal"><span class="pre">-l <span class="pre">lt directories</span> <span class="pre">来自</span> <span class="pre">sys.path&gt; </span></span></code></span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-l"><span class="yiyi-st" id="yiyi-22"> <code class="descname">-l</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-23">不要递归到子目录中只编译直接包含在named或implied目录中的源代码文件。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-f"><span class="yiyi-st" id="yiyi-24"> <code class="descname">-f</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-25">强制重建,即使时间戳是最新的。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-q"><span class="yiyi-st" id="yiyi-26"> <code class="descname">-q</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-27">不要打印编译的文件列表。</span><span class="yiyi-st" id="yiyi-28">如果传递一次,仍会打印错误消息。</span><span class="yiyi-st" id="yiyi-29">如果传递两次(<code class="docutils literal"><span class="pre">-qq</span></code>),则所有输出都被抑制。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-d"><span class="yiyi-st" id="yiyi-30"><code class="descname">-d</code> <code class="descclassname">destdir</code> </span></dt><dd><p><span class="yiyi-st" id="yiyi-31">目录位于正在编译的每个文件的路径之前。</span><span class="yiyi-st" id="yiyi-32">这将出现在编译时间追踪中,并且还被编译到字节代码文件中,在字节代码文件被执行时源文件不存在的情况下,它将被用在追踪和其他消息中。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-x"><span class="yiyi-st" id="yiyi-33"> <code class="descname">-x</code><code class="descclassname"> regex</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-34">regex用于搜索考虑进行编译的每个文件的完整路径如果正则表达式产生匹配则跳过该文件。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-i"><span class="yiyi-st" id="yiyi-35"> <code class="descname">-i</code><code class="descclassname"> list</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-36">读取文件<code class="docutils literal"><span class="pre">list</span></code>,并将其中包含的每行添加到要编译的文件和目录列表中。</span><span class="yiyi-st" id="yiyi-37">如果<code class="docutils literal"><span class="pre">list</span></code><code class="docutils literal"><span class="pre">-</span></code>,请读取<code class="docutils literal"><span class="pre">stdin</span></code>的行。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-b"><span class="yiyi-st" id="yiyi-38"> <code class="descname">-b</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-39">将字节代码文件写入其旧位置和名称这可能会覆盖由另一版本的Python创建的字节代码文件。</span><span class="yiyi-st" id="yiyi-40">默认是将文件写入其<span class="target" id="index-0"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3147"><strong>PEP 3147</strong></a>位置和名称这允许来自多个版本的Python的字节代码文件共存。</span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-r"><span class="yiyi-st" id="yiyi-41"> <code class="descname">-r</code><code class="descclassname"></code></span></dt><dd><p><span class="yiyi-st" id="yiyi-42">控制子目录的最大递归级别。</span><span class="yiyi-st" id="yiyi-43">如果给出,则不会考虑<code class="docutils literal"><span class="pre">-l</span></code></span><span class="yiyi-st" id="yiyi-44"><strong class="program">python -m compilealllt directorygt -r 0</strong>等效于<strong class="program">python -m compilealllt directorygt -l</strong></span></p></dd></dl><dl class="cmdoption"><dt id="cmdoption-compileall-j"><span class="yiyi-st" id="yiyi-45"> <code class="descname">-j</code><code class="descclassname"> N</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-46">使用<em>N</em>工具来编译给定目录中的文件。</span><span class="yiyi-st" id="yiyi-47">如果使用<code class="docutils literal"><span class="pre">0</span></code>,那么将使用<a class="reference internal" href="os.html#os.cpu_count" title="os.cpu_count"><code class="xref py py-func docutils literal"><span class="pre">os.cpu_count()</span></code></a>的结果。</span></p></dd></dl><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-48"><span class="versionmodified">在版本3.2中更改:</span>添加了<code class="docutils literal"><span class="pre">-i</span></code><code class="docutils literal"><span class="pre">-b</span></code><code class="docutils literal"><span class="pre">-h</span></code>选项。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-49"><span class="versionmodified">在3.5版中已更改:</span>添加了<code class="docutils literal"><span class="pre">-j</span></code><code class="docutils literal"><span class="pre">-r</span></code><code class="docutils literal"><span class="pre">-qq</span></code>选项。</span><span class="yiyi-st" id="yiyi-50"><code class="docutils literal"><span class="pre">-q</span></code>选项已更改为多级值。</span><span class="yiyi-st" id="yiyi-51"><code class="docutils literal"><span class="pre">-b</span></code>将始终产生以<code class="docutils literal"><span class="pre">.pyc</span></code>结尾的字节代码文件,而不是<code class="docutils literal"><span class="pre">.pyo</span></code></span></p></div><p><span class="yiyi-st" id="yiyi-52">没有命令行选项来控制<a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal"><span class="pre">compile()</span></code></a>函数使用的优化级别因为Python解释器本身已经提供了选项<strong class="program">python -O -m compileall t3 &gt;</strong></span></p></div><div class="section" id="public-functions"><h2><span class="yiyi-st" id="yiyi-53">32.11.2. </span><span class="yiyi-st" id="yiyi-54">公开函数</span></h2><dl class="function"><dt id="compileall.compile_dir"><span class="yiyi-st" id="yiyi-55"> <code class="descclassname">compileall.</code><code class="descname">compile_dir</code><span class="sig-paren">(</span><em>dir</em>, <em>maxlevels=10</em>, <em>ddir=None</em>, <em>force=False</em>, <em>rx=None</em>, <em>quiet=0</em>, <em>legacy=False</em>, <em>optimize=-1</em>, <em>workers=1</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">递归地下降由<em>dir</em>命名的目录树,编译所有<code class="file docutils literal"><span class="pre">.py</span></code>文件。</span></p><p><span class="yiyi-st" id="yiyi-57"><em>maxlevels</em>参数用于限制递归深度;它默认为<code class="docutils literal"><span class="pre">10</span></code></span></p><p><span class="yiyi-st" id="yiyi-58">如果给出<em>ddir</em>,它将被编译到编译时间跟踪中使用的每个文件的路径前面,并且还被编译到字节代码文件中,它将用于回溯,在源文件在执行字节代码文件时不存在的情况下的其他消息。</span></p><p><span class="yiyi-st" id="yiyi-59">如果<em>force</em>为true即使时间戳是最新的模块也会重新编译。</span></p><p><span class="yiyi-st" id="yiyi-60">如果给定<em>rx</em>将在被考虑用于编译的每个文件的完整路径上调用其搜索方法如果返回true值则跳过该文件。</span></p><p><span class="yiyi-st" id="yiyi-61">如果<em>quiet</em><code class="docutils literal"><span class="pre">False</span></code><code class="docutils literal"><span class="pre">0</span></code>(默认值),文件名和其他信息将打印到标准输出。</span><span class="yiyi-st" id="yiyi-62">设置为<code class="docutils literal"><span class="pre">1</span></code>,只打印错误。</span><span class="yiyi-st" id="yiyi-63">设置为<code class="docutils literal"><span class="pre">2</span></code>,所有输出都被抑制。</span></p><p><span class="yiyi-st" id="yiyi-64">如果<em>legacy</em>为真则字节代码文件将写入其旧位置和名称这可能会覆盖由另一版本的Python创建的字节代码文件。</span><span class="yiyi-st" id="yiyi-65">默认是将文件写入其<span class="target" id="index-1"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3147"><strong>PEP 3147</strong></a>位置和名称这允许来自多个版本的Python的字节代码文件共存。</span></p><p><span class="yiyi-st" id="yiyi-66"><em>optimize</em>指定编译器的优化级别。</span><span class="yiyi-st" id="yiyi-67">它被传递给内建<a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal"><span class="pre">compile()</span></code></a>函数。</span></p><p><span class="yiyi-st" id="yiyi-68">参数<em>workers</em>指定使用多少工作程序并行编译文件。</span><span class="yiyi-st" id="yiyi-69">默认是不使用多个工人。</span><span class="yiyi-st" id="yiyi-70">如果平台不能使用多个工作程序,并且给出<em>工作</em>参数,则顺序编译将用作备用。</span><span class="yiyi-st" id="yiyi-71">如果<em>workers</em>低于<code class="docutils literal"><span class="pre">0</span></code>,则会引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-72"><span class="versionmodified">在版本3.2中已更改:</span>添加了<em>旧版</em><em>优化</em>参数。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-73"><span class="versionmodified">在版本3.5中已更改: t&gt;&gt;添加了<em>工人</em>参数。</span></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-74"><span class="versionmodified">在3.5版本中已更改:</span> <em>quiet</em>参数已更改为多级值。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-75"><span class="versionmodified">在版本3.5中已更改:</span> <em>旧版</em>参数只写出<code class="docutils literal"><span class="pre">.pyc</span></code>文件,而不是<code class="docutils literal"><span class="pre">.pyo</span></code> <em>optimize</em>的值为。</span></p></div></dd></dl><dl class="function"><dt id="compileall.compile_file"><span class="yiyi-st" id="yiyi-76"> <code class="descclassname">compileall.</code><code class="descname">compile_file</code><span class="sig-paren">(</span><em>fullname</em>, <em>ddir=None</em>, <em>force=False</em>, <em>rx=None</em>, <em>quiet=0</em>, <em>legacy=False</em>, <em>optimize=-1</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-77">使用路径<em>fullname</em>编译文件。</span></p><p><span class="yiyi-st" id="yiyi-78">如果给出了<em>ddir</em>,则它被添加到正在编译以用于编译时间回溯的文件的路径,并且还被编译到字节代码文件中,在那里它将用于回溯在源文件在执行字节代码文件时不存在的情况下的其他消息。</span></p><p><span class="yiyi-st" id="yiyi-79">如果给出<em>rx</em>,则其搜索方法将完整路径名传递给正在编译的文件,如果返回真值,则不会编译该文件,并且<code class="docutils literal"><span class="pre">True</span></code>回。</span></p><p><span class="yiyi-st" id="yiyi-80">如果<em>quiet</em><code class="docutils literal"><span class="pre">False</span></code><code class="docutils literal"><span class="pre">0</span></code>(默认值),文件名和其他信息将打印到标准输出。</span><span class="yiyi-st" id="yiyi-81">设置为<code class="docutils literal"><span class="pre">1</span></code>,只打印错误。</span><span class="yiyi-st" id="yiyi-82">设置为<code class="docutils literal"><span class="pre">2</span></code>,所有输出都被抑制。</span></p><p><span class="yiyi-st" id="yiyi-83">如果<em>legacy</em>为真则字节代码文件将写入其旧位置和名称这可能会覆盖由另一版本的Python创建的字节代码文件。</span><span class="yiyi-st" id="yiyi-84">默认是将文件写入其<span class="target" id="index-2"></span> <a class="pep reference external" href="https://www.python.org/dev/peps/pep-3147"><strong>PEP 3147</strong></a>位置和名称这允许来自多个版本的Python的字节代码文件共存。</span></p><p><span class="yiyi-st" id="yiyi-85"><em>optimize</em>指定编译器的优化级别。</span><span class="yiyi-st" id="yiyi-86">它被传递给内建<a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal"><span class="pre">compile()</span></code></a>函数。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-87"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-88"><span class="versionmodified">在3.5版本中已更改:</span> <em>quiet</em>参数已更改为多级值。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-89"><span class="versionmodified">在版本3.5中已更改:</span> <em>旧版</em>参数只写出<code class="docutils literal"><span class="pre">.pyc</span></code>文件,而不是<code class="docutils literal"><span class="pre">.pyo</span></code> <em>optimize</em>的值为。</span></p></div></dd></dl><dl class="function"><dt id="compileall.compile_path"><span class="yiyi-st" id="yiyi-90"> <code class="descclassname">compileall.</code><code class="descname">compile_path</code><span class="sig-paren">(</span><em>skip_curdir=True</em>, <em>maxlevels=0</em>, <em>force=False</em>, <em>quiet=0</em>, <em>legacy=False</em>, <em>optimize=-1</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-91">字节编译沿<code class="docutils literal"><span class="pre">sys.path</span></code>找到的所有<code class="file docutils literal"><span class="pre">.py</span></code>文件。</span><span class="yiyi-st" id="yiyi-92">如果<em>skip_curdir</em>为true默认值则当前目录不包含在搜索中。</span><span class="yiyi-st" id="yiyi-93">所有其他参数都传递给<a class="reference internal" href="#compileall.compile_dir" title="compileall.compile_dir"><code class="xref py py-func docutils literal"><span class="pre">compile_dir()</span></code></a>函数。</span><span class="yiyi-st" id="yiyi-94">注意,与其他编译函数不同,<code class="docutils literal"><span class="pre">maxlevels</span></code>默认为<code class="docutils literal"><span class="pre">0</span></code></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-95"><span class="versionmodified">在版本3.2中已更改:</span>添加了<em>旧版</em><em>优化</em>参数。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-96"><span class="versionmodified">在3.5版本中已更改:</span> <em>quiet</em>参数已更改为多级值。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-97"><span class="versionmodified">在版本3.5中已更改:</span> <em>旧版</em>参数只写出<code class="docutils literal"><span class="pre">.pyc</span></code>文件,而不是<code class="docutils literal"><span class="pre">.pyo</span></code> <em>optimize</em>的值为。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-98">要强制重新编译<code class="file docutils literal"><span class="pre">Lib/</span></code>子目录及其所有子目录中的所有<code class="file docutils literal"><span class="pre">.py</span></code>文件:</span></p><pre><code class="language-python"><span></span><span class="kn">import</span> <span class="nn">compileall</span>
<span class="n">compileall</span><span class="o">.</span><span class="n">compile_dir</span><span class="p">(</span><span class="s1">'Lib/'</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># Perform same compilation, excluding files in .svn directories.</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">compileall</span><span class="o">.</span><span class="n">compile_dir</span><span class="p">(</span><span class="s1">'Lib/'</span><span class="p">,</span> <span class="n">rx</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">r'[/</span><span class="se">\\</span><span class="s1">][.]svn'</span><span class="p">),</span> <span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</code></pre><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-99">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-100">模块<a class="reference internal" href="py_compile.html#module-py_compile" title="py_compile: Generate byte-code files from Python source files."><code class="xref py py-mod docutils literal"><span class="pre">py_compile</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-101">字节编译单个源文件。</span></dd></dl></div></div></div></div>