• 用PyInstaller把Python代码打包成单个独立的exe可执行文件


    之前就想要把自己的BlogsToWordpress打开成exe了。一直没去弄。

    又看到有人提到python打开成exe的问题。

    所以打算现在就去试试。

    注:此处之所有选用BlogsToWordpress,是因为此python脚本够复杂,依赖的模块够多。

    如果这个都搞定了,那么其他单个的python文件,和小python项目的打包,就更不成问题了。

    1.先去找找,目前主流有哪几种方法。

    找到几个名字

    cx_Freeze

    PyInstaller

    py2exe

    2.关于py2exe和PyInstaller的两者官网:

    http://www.py2exe.org/index.cgi/FAQ

    http://www.pyinstaller.org/

    比较了一下,发现貌似后者更好用。

    因为貌似py2exe还需要另外的其他库文件啊啥的,太琐碎。

    而PyInstaller:

    • 可以只是生成单独的可执行程序
    • 且支持的版本也多:2.3到2.7都支持。以及x64也支持
    • 也可以自定义图标

    所以先去试试PyInstaller。

    3.从主页

    http://www.pyinstaller.org/

    中下载对应的zip包:

    https://github.com/downloads/pyinstaller/pyinstaller/pyinstaller-2.0.zip

    得到3M+的pyinstaller-2.0.zip,解压,打开cmd,进入对应目录,去安装,结果说不支持:

    D:	mpdev_toolspython	o_exePyInstallerpyinstaller-2.0>setup.py install
    
    setup.py is not yet supposed to work. Please Use PyInstaller without installation.
    

    所以算了,还是参考官网文档,一点点折腾吧。

    4.参考在线文档:

    http://www.pyinstaller.org/export/v2.0/project/doc/Manual.html?format=raw

    结果说需要PyWin32,所以得先去装这个。

    5.后来才发现,原来之前已经安装过了:

    【已解决】Python中出错:ImportError: No module named win32com.client

    但是要注意的是,import不是pywin32,而是win32com:

    Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pywin32
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named pywin32
    >>> import win32com
    >>>
    

    6.继续参考:

    Installing PyInstaller

    发现,解压后,就算是安装好了。

    7.在一个文件夹中,准备好自己的Python程序:

    D: mp mp_dev_rootpython utorial_summarymake_exeBlogsToWordpress

    以备后用。

    8.去到pyinstaller.py所在目录,去运行:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>pyinstaller.py ..BlogsToWordpressBlogsToWordpress.py
    232 INFO: wrote D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressBlogsToWordpress.spec
    250 INFO: Testing for ability to set icons, version resources...
    269 INFO: ... resource update available
    272 INFO: UPX is not available.
    1437 INFO: checking Analysis
    1437 INFO: building Analysis because out00-Analysis.toc non existent
    1437 INFO: running Analysis out00-Analysis.toc
    1439 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
    3074 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ...
    3075 INFO: Found manifest C:WindowsWinSxSManifestsamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest
    3081 INFO: Searching for file msvcr90.dll
    3081 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcr90.dll
    3081 INFO: Searching for file msvcp90.dll
    3082 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcp90.dll
    3082 INFO: Searching for file msvcm90.dll
    3082 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcm90.dll
    3292 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support\_pyi_bootstrap.py
    4048 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderarchive.py
    4101 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloadercarchive.py
    4159 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.py
    4176 INFO: Analyzing ..BlogsToWordpressBlogsToWordpress.py
    4880 INFO: Hidden import 'encodings' has been found otherwise
    4881 INFO: Looking for run-time hooks
    4881 INFO: Analyzing rthook D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support/rthooks/pyi_rth_encodings.py
    5523 INFO: Warnings written to D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpresswarnBlogsToWordpress.txt
    5528 INFO: checking PYZ
    5529 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
    5529 INFO: building PYZ out00-PYZ.toc
    6225 INFO: checking PKG
    6226 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
    6226 INFO: building PKG out00-PKG.pkg
    6246 INFO: checking EXE
    6246 INFO: rebuilding out00-EXE.toc because BlogsToWordpress.exe missing
    6248 INFO: building EXE from out00-EXE.toc
    6256 INFO: Appending archive to EXE D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpressBlogsToWordpress.exe
    6259 INFO: checking COLLECT
    6259 INFO: building COLLECT out00-COLLECT.toc
     
    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>
    

    可以看到:

    当前pyinstaller下面,的确生成了对应的BlogsToWordpress文件夹:

    其下,也有对应的:

    都已经生成了对应的exe了:

    dist下面,有对应的,exe,pyd,dll等等:

    汗,效率也忒高了,我还以为,需要折腾半天才可以呢,囧。。。。

    9.先去试试生成的exe,是否满足我们的需求,是否可以独立运行。

    不过运行之前,还是去先研究一下对应的参数吧。

    看到了:

    What to generate:
    
    -F, --onefile
    
    create a single file deployment
    
    -D, --onedir
    
    create a single directory deployment (default)
    
    -o DIR, --out=DIR
    
    create the spec file in directory. If not specified, and the current directory is Installer’s root directory, an output subdirectory will be created. Otherwise the current directory is used.
    
    -n NAME, --name=NAME
    
    optional name to assign to the project (from which the spec file name is generated). If omitted, the basename of the (first) script is used.
    

    很明显,默认用的是-D,所以生成的是带目录的,现在重新去执行一次,使用-F生成单一的文件。

    10.删掉旧的。重新运行:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>pyinstaller.py -F ..BlogsToWordpressBlogsToWordpress.py
    39 INFO: wrote D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressBlogsToWordpress.spec
    55 INFO: Testing for ability to set icons, version resources...
    62 INFO: ... resource update available
    63 INFO: UPX is not available.
    848 INFO: checking Analysis
    848 INFO: building Analysis because out00-Analysis.toc non existent
    849 INFO: running Analysis out00-Analysis.toc
    851 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
    905 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ...
    907 INFO: Found manifest C:WindowsWinSxSManifestsamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest
    908 INFO: Searching for file msvcr90.dll
    908 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcr90.dll
    911 INFO: Searching for file msvcp90.dll
    911 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcp90.dll
    912 INFO: Searching for file msvcm90.dll
    914 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcm90.dll
    987 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support\_pyi_bootstrap.py
    1639 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderarchive.py
    1694 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloadercarchive.py
    1750 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.py
    1766 INFO: Analyzing ..BlogsToWordpressBlogsToWordpress.py
    2246 INFO: Hidden import 'encodings' has been found otherwise
    2247 INFO: Looking for run-time hooks
    2249 INFO: Analyzing rthook D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support/rthooks/pyi_rth_encodings.py
    2608 INFO: Warnings written to D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpresswarnBlogsToWordpress.txt
    2611 INFO: checking PYZ
    2612 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
    2613 INFO: building PYZ out00-PYZ.toc
    3290 INFO: checking PKG
    3290 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
    3292 INFO: building PKG out00-PKG.pkg
    4784 INFO: checking EXE
    4784 INFO: rebuilding out00-EXE.toc because BlogsToWordpress.exe missing
    4786 INFO: building EXE from out00-EXE.toc
    4793 INFO: Appending archive to EXE D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdistBlogsToWordpress.exe
    

    去看看结果。

    pyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpress

    下面包含很多toc,pkg,pyz等文件:

    dist下面,就生成了,所需要的单个exe文件:

    但是,注意到了,生成文件中,包含一个警告的文件:

    D: mp mp_dev_rootpython utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpresswarnBlogsToWordpress.txt

    W: no module named org (delayed import by xml.sax)
    W: no module named _scproxy (conditional import by urllib)
    W: no module named cl (delayed, conditional import by aifc)
    W: no module named pwd (delayed, conditional import by posixpath)
    W: no module named org (top-level import by pickle)
    W: no module named Carbon (delayed import by plistlib)
    W: no module named posix (delayed, conditional import by __main__)
    W: no module named fcntl (conditional import by subprocess)
    W: no module named BlogBaidu (top-level import by __main__)
    W: no module named BlogCsdn (top-level import by __main__)
    W: no module named BlogBlogbus (top-level import by __main__)
    W: no module named java (conditional import by xml.sax._exceptions)
    W: no module named BlogTianya (top-level import by __main__)
    W: no module named readline (delayed import by pdb)
    W: no module named AES (delayed, conditional import by archive)
    W: no module named _emx_link (conditional import by os)
    W: no module named pwd (delayed import by getpass)
    W: no module named posix (delayed, conditional import by iu)
    W: no module named EasyDialogs (conditional import by getpass)
    W: no module named termios (top-level import by getpass)
    W: no module named gestalt (delayed import by platform)
    W: no module named org (top-level import by copy)
    W: no module named fcntl (top-level import by tempfile)
    W: no module named readline (delayed, conditional import by cmd)
    W: no module named crifanLib (top-level import by __main__)
    W: no module named SOCKS (top-level import by ftplib)
    W: no module named java (delayed import by platform)
    W: no module named cl (delayed import by aifc)
    W: no module named BlogQQ (top-level import by __main__)
    W: no module named xmlparse (top-level import by pyexpat)
    W: no module named xmltok (top-level import by pyexpat)
    W: no module named BlogDiandian (top-level import by __main__)
    W: no module named BlogSohu (top-level import by __main__)
    W: no module named BlogRenren (top-level import by __main__)
    W: no module named AES (delayed, conditional import by __main__)
    W: no module named posix (conditional import by os)
    W: no module named BlogNetease (top-level import by __main__)
    W: no module named MacOS (delayed import by platform)
    W: no module named vms_lib (delayed, conditional import by platform)
    W: no module named rourl2path (conditional import by urllib)
    W: no module named _xmlplus (top-level import by xml)
    W: no module named Crypt (delayed, conditional import by __main__)
    W: no module named BlogSina (top-level import by __main__)
    W: delayed  exec statement detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  __import__ hack detected at line 0 - optparse (D:	mpdev_install_rootPython27_x64liboptparse.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed  exec statement detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - encodings (D:	mpdev_install_rootPython27_x64libencodings\__init__.pyc)
    W: __all__ is built strangely at line 0 - dis (D:	mpdev_install_rootPython27_x64libdis.pyc)
    W: __all__ is built strangely at line 0 - hashlib (D:	mpdev_install_rootPython27_x64libhashlib.pyc)
    W: delayed conditional eval hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed conditional __import__ hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed  __import__ hack detected at line 0 - email (D:	mpdev_install_rootPython27_x64libemail\__init__.pyc)
    W: delayed  exec statement detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: __all__ is built strangely at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed  exec statement detected at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:	mpdev_install_rootPython27_x64libunittestmain.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed  __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: __all__ is built strangely at line 0 - __future__ (D:	mpdev_install_rootPython27_x64lib\__future__.pyc)
    W: delayed  __import__ hack detected at line 0 - xml.sax (D:	mpdev_install_rootPython27_x64libxmlsax\__init__.pyc)
    W: delayed  eval hack detected at line 0 - gettext (D:	mpdev_install_rootPython27_x64libgettext.pyc)
    

    不知道是否影响程序。

    11.去运行单个的exe,看看效果。

    结果直接出错:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdist>BlogsToWordpress.exe
    Traceback (most recent call last):
      File "<string>", line 127, in <module>
      File "D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.py", line 409, in importHook
        raise ImportError("No module named %s" % fqname)
    ImportError: No module named crifanLib
    

    很明显,还是无法自动导入很多的库啊。

    去想办法,添加搜索路径,让其找到对应的库。

    12.好像是-p参数:

    -p DIR, --paths=DIR
    
    set base path for import (like using PYTHONPATH). Multiple directories are allowed, separating them with the path separator (‘;’ under Windows, ‘:’ under Linux), or using this option multiple times.
    

    去试试:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>pyinstaller.py -F -p D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs;D:	mp	mp_dev_rootpython	utorial
    _summarymake_exeBlogsToWordpresslibscrifan;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifanlogModules;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsT
    oWordpresslibs	hirdparty;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdpartychardet; ..BlogsToWordpressBlogsToWordpress.py
    18 INFO: wrote D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressBlogsToWordpress.spec
    33 INFO: Testing for ability to set icons, version resources...
    36 INFO: ... resource update available
    39 INFO: UPX is not available.
    674 INFO: checking Analysis
    677 INFO: building because pathex changed
    679 INFO: running Analysis out00-Analysis.toc
    680 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
    733 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ...
    735 INFO: Found manifest C:WindowsWinSxSManifestsamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest
    736 INFO: Searching for file msvcr90.dll
    736 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcr90.dll
    738 INFO: Searching for file msvcp90.dll
    739 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcp90.dll
    740 INFO: Searching for file msvcm90.dll
    743 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcm90.dll
    812 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support\_pyi_bootstrap.py
    1512 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderarchive.py
    1578 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloadercarchive.py
    1648 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.py
    1667 INFO: Analyzing ..BlogsToWordpressBlogsToWordpress.py
    3016 INFO: Hidden import 'encodings' has been found otherwise
    3016 INFO: Looking for run-time hooks
    3018 INFO: Analyzing rthook D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support/rthooks/pyi_rth_encodings.py
    3670 INFO: Warnings written to D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpresswarnBlogsToWordpress.txt
    3674 INFO: checking PYZ
    3679 INFO: building because toc changed
    3679 INFO: building PYZ out00-PYZ.toc
    5713 INFO: checking PKG
    5716 INFO: building because D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpressout00-PYZ.pyz changed
    5717 INFO: building PKG out00-PKG.pkg
    7163 INFO: checking EXE
    7164 INFO: rebuilding out00-EXE.toc because pkg is more recent
    7164 INFO: building EXE from out00-EXE.toc
    7167 INFO: Appending archive to EXE D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdistBlogsToWordpress.exe
     
    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>
    

    添加上路径后,生成的exe,的确也大了一点,变成4505KB了:

    另外,warnBlogsToWordpress.txt中,的确没了crifanLib,但是还是有一些其他,可能要依赖的库:

    W: no module named org (delayed import by xml.sax)
    W: no module named PIL (delayed import by BlogRenren)
    W: no module named _dummy_threading (top-level import by dummy_threading)
    W: no module named cl (delayed, conditional import by aifc)
    W: no module named pwd (delayed, conditional import by posixpath)
    W: no module named org (top-level import by pickle)
    W: no module named Carbon (delayed import by plistlib)
    W: no module named PIL (delayed, conditional import by BlogNetease)
    W: no module named posix (delayed, conditional import by __main__)
    W: no module named iconv_codec (top-level import by BeautifulSoup)
    W: no module named fcntl (conditional import by subprocess)
    W: no module named MacOS (delayed import by platform)
    W: no module named readline (delayed import by pdb)
    W: no module named AES (delayed, conditional import by archive)
    W: no module named _scproxy (conditional import by urllib)
    W: no module named pwd (delayed import by getpass)
    W: no module named posix (delayed, conditional import by iu)
    W: no module named EasyDialogs (conditional import by getpass)
    W: no module named termios (top-level import by getpass)
    W: no module named gestalt (delayed import by platform)
    W: no module named org (top-level import by copy)
    W: no module named fcntl (top-level import by tempfile)
    W: no module named cjkcodecs (top-level import by BeautifulSoup)
    W: no module named readline (delayed, conditional import by cmd)
    W: no module named java (delayed import by platform)
    W: no module named cl (delayed import by aifc)
    W: no module named xmlparse (top-level import by pyexpat)
    W: no module named xmltok (top-level import by pyexpat)
    W: no module named java (conditional import by xml.sax._exceptions)
    W: no module named _emx_link (conditional import by os)
    W: no module named posix (conditional import by os)
    W: no module named rourl2path (conditional import by urllib)
    W: no module named vms_lib (delayed, conditional import by platform)
    W: no module named SOCKS (top-level import by ftplib)
    W: no module named _xmlplus (top-level import by xml)
    W: no module named Crypt (delayed, conditional import by __main__)
    W: no module named AES (delayed, conditional import by __main__)
    W: delayed  exec statement detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  __import__ hack detected at line 0 - optparse (D:	mpdev_install_rootPython27_x64liboptparse.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed  exec statement detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - encodings (D:	mpdev_install_rootPython27_x64libencodings\__init__.pyc)
    W: __all__ is built strangely at line 0 - dummy_threading (D:	mpdev_install_rootPython27_x64libdummy_threading.pyc)
    W: __all__ is built strangely at line 0 - dis (D:	mpdev_install_rootPython27_x64libdis.pyc)
    W: __all__ is built strangely at line 0 - hashlib (D:	mpdev_install_rootPython27_x64libhashlib.pyc)
    W: delayed conditional eval hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed conditional __import__ hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed  __import__ hack detected at line 0 - email (D:	mpdev_install_rootPython27_x64libemail\__init__.pyc)
    W: delayed  exec statement detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: __all__ is built strangely at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed  exec statement detected at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:	mpdev_install_rootPython27_x64libunittestmain.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed  __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: __all__ is built strangely at line 0 - __future__ (D:	mpdev_install_rootPython27_x64lib\__future__.pyc)
    W: delayed  __import__ hack detected at line 0 - xml.sax (D:	mpdev_install_rootPython27_x64libxmlsax\__init__.pyc)
    W: delayed  eval hack detected at line 0 - gettext (D:	mpdev_install_rootPython27_x64libgettext.pyc)
    

    比如,其中的PIL等库。

    不过,关于PIL,我去看了看自己的

    D: mpdev_install_rootPython27_x64Libsite-packages

    中的确没有,应该是重装python,导致了之前安装好的PIL没了。

    所以,还是需要自己重新安装一下PIL的。

    12.关于安装PIL的过程,详见:

    【记录】下载和安装Python的第三方图像处理的库:PIL(Python Imaging Library)

    13.然后再去

    D: mpdev_install_rootPython27_x64Libsite-packages

    确认一下,果然有了PIL了。

    然后此处,删掉旧的,重新执行一次:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>pyinstaller.py -F -p D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs;D:	mp	mp_dev_rootpython	utorial
    _summarymake_exeBlogsToWordpresslibscrifan;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifanlogModules;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsT
    oWordpresslibs	hirdparty;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdpartychardet; ..BlogsToWordpressBlogsToWordpress.py
    18 INFO: wrote D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressBlogsToWordpress.spec
    33 INFO: Testing for ability to set icons, version resources...
    37 INFO: ... resource update available
    39 INFO: UPX is not available.
    684 INFO: checking Analysis
    684 INFO: building Analysis because out00-Analysis.toc non existent
    684 INFO: running Analysis out00-Analysis.toc
    685 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
    740 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ...
    741 INFO: Found manifest C:WindowsWinSxSManifestsamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest
    742 INFO: Searching for file msvcr90.dll
    743 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcr90.dll
    744 INFO: Searching for file msvcp90.dll
    745 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcp90.dll
    747 INFO: Searching for file msvcm90.dll
    750 INFO: Found file C:WindowsWinSxSamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68bmsvcm90.dll
    821 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support\_pyi_bootstrap.py
    1531 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderarchive.py
    1600 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloadercarchive.py
    1672 INFO: Analyzing D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.py
    1692 INFO: Analyzing ..BlogsToWordpressBlogsToWordpress.py
    2903 INFO: Hidden import 'encodings' has been found otherwise
    2904 INFO: Looking for run-time hooks
    2905 INFO: Analyzing rthook D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support/rthooks/pyi_rth_PIL_Image.py
    2917 INFO: Analyzing rthook D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0support/rthooks/pyi_rth_encodings.py
    3319 INFO: Warnings written to D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpresswarnBlogsToWordpress.txt
    3325 INFO: checking PYZ
    3326 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
    3326 INFO: building PYZ out00-PYZ.toc
    5360 INFO: checking PKG
    5360 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
    5361 INFO: building PKG out00-PKG.pkg
    6839 INFO: checking EXE
    6839 INFO: rebuilding out00-EXE.toc because BlogsToWordpress.exe missing
    6840 INFO: building EXE from out00-EXE.toc
    6842 INFO: Appending archive to EXE D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdistBlogsToWordpress.exe
     
    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>
    

    虽然结果警告中,也还是有PIL:

    W: no module named org (delayed import by xml.sax)
    W: no module named _dummy_threading (top-level import by dummy_threading)
    W: no module named cl (delayed, conditional import by aifc)
    W: no module named pwd (delayed, conditional import by posixpath)
    W: no module named org (top-level import by pickle)
    W: no module named Carbon (delayed import by plistlib)
    W: no module named posix (delayed, conditional import by __main__)
    W: no module named iconv_codec (top-level import by BeautifulSoup)
    W: no module named fcntl (conditional import by subprocess)
    W: no module named MacOS (delayed import by platform)
    W: no module named readline (delayed import by pdb)
    W: no module named AES (delayed, conditional import by archive)
    W: no module named _scproxy (conditional import by urllib)
    W: no module named pwd (delayed import by getpass)
    W: no module named posix (delayed, conditional import by iu)
    W: no module named EasyDialogs (conditional import by getpass)
    W: no module named termios (top-level import by getpass)
    W: no module named gestalt (delayed import by platform)
    W: no module named org (top-level import by copy)
    W: no module named _imaging_gif (top-level import by PIL.GifImagePlugin)
    W: no module named fcntl (top-level import by tempfile)
    W: no module named cjkcodecs (top-level import by BeautifulSoup)
    W: no module named readline (delayed, conditional import by cmd)
    W: no module named java (delayed import by platform)
    W: no module named cl (delayed import by aifc)
    W: no module named xmlparse (top-level import by pyexpat)
    W: no module named xmltok (top-level import by pyexpat)
    W: no module named java (conditional import by xml.sax._exceptions)
    W: no module named _emx_link (conditional import by os)
    W: no module named posix (conditional import by os)
    W: no module named ICCProfile (delayed, conditional import by PIL.PngImagePlugin)
    W: no module named rourl2path (conditional import by urllib)
    W: no module named vms_lib (delayed, conditional import by platform)
    W: no module named SOCKS (top-level import by ftplib)
    W: no module named _xmlplus (top-level import by xml)
    W: no module named Crypt (delayed, conditional import by __main__)
    W: no module named AES (delayed, conditional import by __main__)
    W: delayed  exec statement detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  eval hack detected at line 0 - bdb (D:	mpdev_install_rootPython27_x64libdb.pyc)
    W: delayed  __import__ hack detected at line 0 - optparse (D:	mpdev_install_rootPython27_x64liboptparse.pyc)
    W: delayed  __import__ hack detected at line 0 - PIL.Image (D:	mpdev_install_rootPython27_x64libsite-packagesPILImage.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed  exec statement detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: delayed conditional __import__ hack detected at line 0 - doctest (D:	mpdev_install_rootPython27_x64libdoctest.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: __all__ is built strangely at line 0 - tokenize (D:	mpdev_install_rootPython27_x64lib	okenize.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - pickle (D:	mpdev_install_rootPython27_x64libpickle.pyc)
    W: delayed  __import__ hack detected at line 0 - encodings (D:	mpdev_install_rootPython27_x64libencodings\__init__.pyc)
    W: __all__ is built strangely at line 0 - dummy_threading (D:	mpdev_install_rootPython27_x64libdummy_threading.pyc)
    W: __all__ is built strangely at line 0 - dis (D:	mpdev_install_rootPython27_x64libdis.pyc)
    W: __all__ is built strangely at line 0 - hashlib (D:	mpdev_install_rootPython27_x64libhashlib.pyc)
    W: delayed conditional eval hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed conditional __import__ hack detected at line 0 - warnings (D:	mpdev_install_rootPython27_x64libwarnings.pyc)
    W: delayed  __import__ hack detected at line 0 - email (D:	mpdev_install_rootPython27_x64libemail\__init__.pyc)
    W: delayed  exec statement detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed  eval hack detected at line 0 - pdb (D:	mpdev_install_rootPython27_x64libpdb.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0PyInstallerloaderiu.pyc)
    W: __all__ is built strangely at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed  exec statement detected at line 0 - collections (D:	mpdev_install_rootPython27_x64libcollections.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:	mpdev_install_rootPython27_x64libunittestmain.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: delayed  __import__ hack detected at line 0 - unittest.loader (D:	mpdev_install_rootPython27_x64libunittestloader.pyc)
    W: __all__ is built strangely at line 0 - __future__ (D:	mpdev_install_rootPython27_x64lib\__future__.pyc)
    W: delayed  __import__ hack detected at line 0 - xml.sax (D:	mpdev_install_rootPython27_x64libxmlsax\__init__.pyc)
    W: delayed  eval hack detected at line 0 - gettext (D:	mpdev_install_rootPython27_x64libgettext.pyc)
    

    但是很明显,只是PIL模块内部的一些小问题罢了,不理会。

    生成的exe,的确又变大了,4748KB:

    13.去运行现在的最新的BlogsToWordpress.exe,看看效果如何。

    果然是可以,如期望的一样,去执行了:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdist>BlogsToWordpress.exe
    Imported: crifanLib,    v2.4
    Imported: BlogNetease,  v1.4
    Imported: BlogBaidu,    v3.4
    Imported: BlogSina,     v1.5
    Imported: BlogQQ,       v1.8
    Imported: BlogCsdn,     v1.1
    Imported: BlogSohu,     v1.3
    LINE 1600 : INFO     Current runtime info:
    LINE 1600 : INFO     Paramenters       : ['D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe']
    LINE 1600 : INFO     Python version    : sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)
    LINE 1600 : INFO     platform.machine()=AMD64
    LINE 1600 : INFO     platform.node()=PC-CLI-1
    LINE 1600 : INFO     platform.platform()=Windows-7-6.1.7601-SP1
    LINE 1600 : INFO     platform.processor()=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
    LINE 1600 : INFO     platform.python_build()=('default', 'Apr 10 2012 23:24:47')
    LINE 1600 : INFO     platform.python_compiler()=MSC v.1500 64 bit (AMD64)
    LINE 1600 : INFO     platform.python_branch()=
    LINE 1600 : INFO     platform.python_implementation()=CPython
    LINE 1600 : INFO     platform.python_revision()=
    LINE 1600 : INFO     platform.python_version()=2.7.3
    LINE 1600 : INFO     platform.python_version_tuple()=('2', '7', '3')
    LINE 1600 : INFO     platform.release()=7
    LINE 1600 : INFO     platform.system()=Windows
    LINE 1600 : INFO     platform.version()=6.1.7601
    LINE 1600 : INFO     platform.uname()=('Windows', 'PC-CLI-1', '7', '6.1.7601', 'AMD64', 'Intel64 Family 6 Model 42 Stepping 7, GenuineIntel')
    LINE 1600 : INFO     Default encoding  : ascii
    LINE 1600 : INFO     Current path      : C:UsersCLiAppDataLocalTemp\_MEI252922
    LINE 1600 : INFO     版本信息:v16.8
    LINE 1600 : INFO     1.如果脚本运行出错,请务必把上述(1)从脚本开始运行到上述所打印出来的系统信息(2)出错时候的相关信息(3)脚本所生成的BlogsToWordpress.log文件,通过复制粘贴、截图、附件等方式
    LINE 1600 : INFO       发送至admin(at)crifan.com或跟帖(下面有地址)回复,否则如果没有足够的错误相关信息,我就是想帮你解决问题,也没法帮啊!
    LINE 1600 : INFO     2.如对此脚本使用有任何疑问,请输入-h参数以获得相应的参数说明。
    LINE 1600 : INFO     3.关于本程序详细的使用说明和更多相关信息,请参考:
    LINE 1600 : INFO       BlogsToWordPress:将百度空间(新版和旧版),网易163,新浪Sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到WordPress
    LINE 1600 : INFO       https://www.crifan.com/crifan_released_all/website/python/blogstowordpress/
    LINE 1600 : INFO     --------------------------------------------------------------------------------
    LINE 1600 : INFO     Your process type of post is: Export post to WXR(WordPress eXtended Rss).
    LINE 1575 : ERROR    Must designate the entry URL for the first blog item !
    LINE 1575 : ERROR    Unknown Error !
    Traceback (most recent call last):
      File "<string>", line 1931, in <module>
      File "<string>", line 1655, in main
    SystemExit: 2
     
    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdist>
    

    加上对应参数,再试试:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdist>BlogsToWordpress.exe -s http://againinput4.blog.163.com
    Imported: crifanLib,    v2.4
    Imported: BlogNetease,  v1.4
    Imported: BlogBaidu,    v3.4
    Imported: BlogSina,     v1.5
    Imported: BlogQQ,       v1.8
    Imported: BlogCsdn,     v1.1
    Imported: BlogSohu,     v1.3
    LINE 1600 : INFO     Current runtime info:
    LINE 1600 : INFO     Paramenters       : ['D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe', '-s', 'http://againinput4.blog.163
    .com']
    LINE 1600 : INFO     Python version    : sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)
    LINE 1600 : INFO     platform.machine()=AMD64
    LINE 1600 : INFO     platform.node()=PC-CLI-1
    LINE 1600 : INFO     platform.platform()=Windows-7-6.1.7601-SP1
    LINE 1600 : INFO     platform.processor()=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
    LINE 1600 : INFO     platform.python_build()=('default', 'Apr 10 2012 23:24:47')
    LINE 1600 : INFO     platform.python_compiler()=MSC v.1500 64 bit (AMD64)
    ...
    

    的确就是可以正常执行了。

    剩下的,就是要拿到别的windows平台上,多测试测试,是否都正常。

    14.接着打算再去试试,添加icon图标的事情。

    参考官网的参数解释
    新的document

    # 原文
    -r FILE[,TYPE[,NAME[,LANGUAGE]]], –resource=FILE[,TYPE[,NAME[,LANGUAGE]]]
    add/update resource of the given type, name and language from FILE to the final executable. FILE can be a data file or an exe/dll. For data files, atleast TYPE and NAME need to be specified, LANGUAGE defaults to 0 or may be specified as wildcard * to update all resources of the given TYPE and NAME. For exe/dll files, all resources from FILE will be added/updated to the final executable if TYPE, NAME and LANGUAGE are omitted or specified as wildcard *.Multiple resources are allowed, using this option multiple times.
    

    去运行:

    D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0>pyinstaller.py -F -p D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs;D:	mp	mp_dev_rootpython	utorial
    _summarymake_exeBlogsToWordpresslibscrifan;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifanlogModules;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsT
    oWordpresslibs	hirdparty;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdpartychardet; -i ..BlogsToWordpressBlogsToWordpress.ico ..BlogsToWordpressBlogsToWordpre
    ss.py
    18 INFO: wrote D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressBlogsToWordpress.spec
    34 INFO: Testing for ability to set icons, version resources...
    37 INFO: ... resource update available
    40 INFO: UPX is not available.
    681 INFO: checking Analysis
    696 INFO: checking PYZ
    709 INFO: checking PKG
    711 INFO: building because D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressuildpyi.win32BlogsToWordpressBlogsToWordpress.exe.manifest changed
    712 INFO: building PKG out00-PKG.pkg
    2190 INFO: checking EXE
    2192 INFO: building because icon changed
    2192 INFO: building EXE from out00-EXE.toc
    2207 INFO: SRCPATH [('..\BlogsToWordpress\BlogsToWordpress.ico', None)]
    2207 INFO: Updating icons from ['..\BlogsToWordpress\BlogsToWordpress.ico'] to c:userscliappdatalocal	emp	mpouutgx
    2209 INFO: Writing RT_GROUP_ICON 0 resource with 34 bytes
    2211 INFO: Writing RT_ICON 1 resource with 1128 bytes
    2213 INFO: Writing RT_ICON 2 resource with 4264 bytes
    2222 INFO: Appending archive to EXE D:	mp	mp_dev_rootpython	utorial_summarymake_exepyinstaller-2.0BlogsToWordpressdistBlogsToWordpress.exe
    

    可以看到,其自动会把icon添加到当前已有的exe中,然后可以看到对应的,带图标的exe的效果:

    总结
    PyInstaller,的确非常好用啊。感谢作者们。

    简单总结其使用方法:

    • 生成单一的exe文件:
    pyinstaller.py -F ..BlogsToWordpressBlogsToWordpress.py
    ```
    - 添加必要的搜索路径:
    ````bash
    pyinstaller.py -F -p D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifan;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifanlogModules;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdparty;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdpartychardet; ..BlogsToWordpressBlogsToWordpress.py
    ```
    - 添加必要的搜索路径,且带图标:
    ````bash
    pyinstaller.py -F -p D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifan;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibscrifanlogModules;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdparty;D:	mp	mp_dev_rootpython	utorial_summarymake_exeBlogsToWordpresslibs	hirdpartychardet; -i ..BlogsToWordpressBlogsToWordpress.ico ..BlogsToWordpressBlogsToWordpress.py
    ```
    
    需要注意的是:
    
    1.检查生成的
    
    pyinstaller-2.0XXXuildpyi.win32XXXwarnXXX.txt
    
    (XXX是你的项目名)
    
    中,是否缺少了必要的模块。
    
    如果有缺少的,那么去如上所述,添加必要的搜素路径,使得pyinstaller在运行时,可以找到对应的模块并集成进来。
    
    2.此处我这里没有UPX,暂时没去折腾。
    
    估计是用UPX去压缩,压缩后所生成的exe文件的大小,会小得多。
    
    转自:https://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/
  • 相关阅读:
    在mac下使用ppk文件ssh到远程主机
    Openstack镜像和密码
    ubuntu下如何用命令行运行deb安装包
    python中使用@property
    linux里的vi怎么移动到最后一行
    Git 怎样保证fork出来的project和原project(上游项目)同步更新
    使用msgfmt编译多语言文件
    ubuntu创建文件夹快捷方式命令
    ssh: connect to host localhost port 22: Connection refused 问题
    excel中如何批量将所有的网址设为超链接
  • 原文地址:https://www.cnblogs.com/geoffreygao/p/13223298.html
Copyright © 2020-2023  润新知