<p>文件在导入时编译。这不是安全问题。很简单,如果导入它,python会保存输出。见Fredrik Lundh关于Effbot的<a href="http://effbot.org/zone/python-compile.htm" rel="nofollow noreferrer">this post</a>。</p>
<pre><code>>>>import main
# main.pyc is created
</code></pre>
<p>运行脚本时,python将使用*.pyc文件。
如果您有其他需要预编译脚本的原因,可以使用<a href="http://docs.python.org/library/compileall.html" rel="nofollow noreferrer">^{<cd1>}</a>模块。</p>
<pre><code>python -m compileall .
</code></pre>
<h2>编译所有用法</h2>
<pre><code>python -m compileall --help
option --help not recognized
usage: python compileall.py [-l] [-f] [-q] [-d destdir] [-x regexp] [directory ...]
-l: don't recurse down
-f: force rebuild even if timestamps are up-to-date
-q: quiet operation
-d destdir: purported directory name for error messages
if no directory arguments, -l sys.path is assumed
-x regexp: skip files matching the regular expression regexp
the regexp is searched for in the full path of the file
</code></pre>
<h2>问题编辑答案</h2>
<ol>
<li><blockquote>
<p>If the response is potential disk permissions for the directory of <code>main.py</code>, why does Python compile modules?</p>
</blockquote>
<p>模块和脚本的处理方式相同。导入是触发输出被保存的原因。</p></li>
<li><blockquote>
<p>If the reason is that benefits will be minimal, consider the situation when the script will be used a large number of times (such as in a CGI application). </p>
</blockquote>
<p>使用compileall并不能解决这个问题。
除非显式调用,否则由python执行的脚本不会使用<code>*.pyc</code>。这有副作用,正如<a href="https://stackoverflow.com/questions/5268017/why-does-python-compile-modules-but-not-the-script-being-run/5321733#5321733">his answer</a>中的<a href="https://stackoverflow.com/users/136829/glenn-maynard">Glenn Maynard</a>所说。</p>
<p>给出的CGI应用程序示例应该使用<a href="http://www.fastcgi.com/drupal/" rel="nofollow noreferrer">FastCGI</a>这样的技术来处理。如果您希望消除编译脚本的开销,那么您可能也希望消除启动python的开销,更不用说数据库连接开销了。</p>
<p>轻量级引导脚本可以使用,甚至可以使用<code>python -c "import script"</code>,但是这些脚本的样式有问题。</p></li>
</ol>
<p><a href="https://stackoverflow.com/users/136829/glenn-maynard">Glenn Maynard</a>为纠正和改进这个答案提供了一些启发。</p>