回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正试图通过<a href="http://www.pyinstaller.org/" rel="nofollow noreferrer">PyInstaller</a>构建一个python脚本。我使用了以下命令来配置、生成规范文件和生成:</p>
<pre><code>wget pyinstaller.zip, extracted it, python Configure.py, etc, then:
python pyinstaller/Makespec.py --onefile myscript.py
python pyinstaller/Build.py myscript.spec
</code></pre>
<p>下面是它生成的spec文件:</p>
<pre><code># -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), 'icinga.py'],
pathex=['/home/user/projects/icinga_python/releases/v2.1'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'myscript'),
debug=False,
strip=False,
upx=True,
console=1 )
</code></pre>
<p>这在<code>dist/</code>目录中构建了一个可执行文件。当尝试运行此文件时,我得到以下信息:</p>
<pre><code>Traceback (most recent call last):
File "<string>", line 12, in <module>
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 455, in importHook
raise ImportError, "No module named %s" % fqname
ImportError: No module named mysql
</code></pre>
<p>如果我将这个可执行文件移到实际Python代码的目录中,它会给出不同的结果:</p>
<pre><code>Traceback (most recent call last):
File "<string>", line 12, in <module>
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 521, in doimport
exec co in mod.__dict__
File "CLUSTER/mysql/icingasql.py", line 13, in <module>
import urllib2
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 455, in importHook
raise ImportError, "No module named %s" % fqname
ImportError: No module named urllib2
</code></pre>
<p>在。。。<a href="http://www.pyinstaller.org/export/latest/trunk/doc/Manual.html?format=raw" rel="nofollow noreferrer">pyinstaller docs </a>我看到<code>--onefile</code>是我需要/想要的选项,但出于某种原因,并非所有内容都在其中编译。</p>
<p>这个脚本并没有真正包含任何花哨的东西,只是我为sql语句编写的一些快速模块,以及对某些网站的解析。</p>