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

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

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

所以打算现在就去试试。

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

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

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

找到几个名字

cx_Freeze

PyInstaller

py2exe

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

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

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

而PyInstaller:

可以只是生成单独的可执行程序

且支持的版本也多:2.3到2.7都支持。以及x64也支持

也可以自定义图标

所以先去试试PyInstaller。

3.从主页

中下载对应的zip包:

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

D:\tmp\dev_tools\python\to_exe\PyInstaller\pyinstaller-2.0>setup.py install

setup.py is not yet supposed to work. Please Use PyInstaller without installation.

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

4.参考在线文档:

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

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

但是要注意的是,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 "", line 1, in

ImportError: No module named pywin32

>>> import win32com

>>>

6.继续参考:

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

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

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress

以备后用。

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

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>pyinstaller.py ..\BlogsToWordpress\BlogsToWordpress.py

232 INFO: wrote D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\BlogsToWordpress.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:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest

3081 INFO: Searching for file msvcr90.dll

3081 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll

3081 INFO: Searching for file msvcp90.dll

3082 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcp90.dll

3082 INFO: Searching for file msvcm90.dll

3082 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcm90.dll

3292 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support\_pyi_bootstrap.py

4048 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\archive.py

4101 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\carchive.py

4159 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.py

4176 INFO: Analyzing ..\BlogsToWordpress\BlogsToWordpress.py

4880 INFO: Hidden import 'encodings' has been found otherwise

4881 INFO: Looking for run-time hooks

4881 INFO: Analyzing rthook D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support/rthooks/pyi_rth_encodings.py

5523 INFO: Warnings written to D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\warnBlogsToWordpress.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\BlogsToWordpress.exe

6259 INFO: checking COLLECT

6259 INFO: building COLLECT out00-COLLECT.toc

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>

可以看到:

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

1834331-20200702101131320-1516935149.png

其下,也有对应的:

1834331-20200702101150392-533364651.png

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

1834331-20200702101200289-2008228305.png

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

1834331-20200702101211005-392703617.png

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

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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>pyinstaller.py -F ..\BlogsToWordpress\BlogsToWordpress.py

39 INFO: wrote D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\BlogsToWordpress.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:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest

908 INFO: Searching for file msvcr90.dll

908 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll

911 INFO: Searching for file msvcp90.dll

911 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcp90.dll

912 INFO: Searching for file msvcm90.dll

914 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcm90.dll

987 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support\_pyi_bootstrap.py

1639 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\archive.py

1694 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\carchive.py

1750 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.py

1766 INFO: Analyzing ..\BlogsToWordpress\BlogsToWordpress.py

2246 INFO: Hidden import 'encodings' has been found otherwise

2247 INFO: Looking for run-time hooks

2249 INFO: Analyzing rthook D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support/rthooks/pyi_rth_encodings.py

2608 INFO: Warnings written to D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\warnBlogsToWordpress.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe

去看看结果。

pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress

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

1834331-20200702101305362-2074717285.png

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

1834331-20200702101333738-873740438.png

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

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\warnBlogsToWordpress.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:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed __import__ hack detected at line 0 - optparse (D:\tmp\dev_install_root\Python27_x64\lib\optparse.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed exec statement detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - encodings (D:\tmp\dev_install_root\Python27_x64\lib\encodings\__init__.pyc)

W: __all__ is built strangely at line 0 - dis (D:\tmp\dev_install_root\Python27_x64\lib\dis.pyc)

W: __all__ is built strangely at line 0 - hashlib (D:\tmp\dev_install_root\Python27_x64\lib\hashlib.pyc)

W: delayed conditional eval hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed conditional __import__ hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed __import__ hack detected at line 0 - email (D:\tmp\dev_install_root\Python27_x64\lib\email\__init__.pyc)

W: delayed exec statement detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: __all__ is built strangely at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed exec statement detected at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:\tmp\dev_install_root\Python27_x64\lib\unittest\main.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: __all__ is built strangely at line 0 - __future__ (D:\tmp\dev_install_root\Python27_x64\lib\__future__.pyc)

W: delayed __import__ hack detected at line 0 - xml.sax (D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\__init__.pyc)

W: delayed eval hack detected at line 0 - gettext (D:\tmp\dev_install_root\Python27_x64\lib\gettext.pyc)

不知道是否影响程序。

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

结果直接出错:

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist>BlogsToWordpress.exe

Traceback (most recent call last):

File "", line 127, in

File "D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>pyinstaller.py -F -p D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs;D:\tmp\tmp_dev_root\python\tutorial

_summary\make_exe\BlogsToWordpress\libs\crifan;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsT

oWordpress\libs\thirdparty;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet; ..\BlogsToWordpress\BlogsToWordpress.py

18 INFO: wrote D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\BlogsToWordpress.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:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest

736 INFO: Searching for file msvcr90.dll

736 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll

738 INFO: Searching for file msvcp90.dll

739 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcp90.dll

740 INFO: Searching for file msvcm90.dll

743 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcm90.dll

812 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support\_pyi_bootstrap.py

1512 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\archive.py

1578 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\carchive.py

1648 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.py

1667 INFO: Analyzing ..\BlogsToWordpress\BlogsToWordpress.py

3016 INFO: Hidden import 'encodings' has been found otherwise

3016 INFO: Looking for run-time hooks

3018 INFO: Analyzing rthook D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support/rthooks/pyi_rth_encodings.py

3670 INFO: Warnings written to D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\warnBlogsToWordpress.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\out00-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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>

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

1834331-20200702101513411-2090105109.png

另外,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:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed __import__ hack detected at line 0 - optparse (D:\tmp\dev_install_root\Python27_x64\lib\optparse.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed exec statement detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - encodings (D:\tmp\dev_install_root\Python27_x64\lib\encodings\__init__.pyc)

W: __all__ is built strangely at line 0 - dummy_threading (D:\tmp\dev_install_root\Python27_x64\lib\dummy_threading.pyc)

W: __all__ is built strangely at line 0 - dis (D:\tmp\dev_install_root\Python27_x64\lib\dis.pyc)

W: __all__ is built strangely at line 0 - hashlib (D:\tmp\dev_install_root\Python27_x64\lib\hashlib.pyc)

W: delayed conditional eval hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed conditional __import__ hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed __import__ hack detected at line 0 - email (D:\tmp\dev_install_root\Python27_x64\lib\email\__init__.pyc)

W: delayed exec statement detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: __all__ is built strangely at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed exec statement detected at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:\tmp\dev_install_root\Python27_x64\lib\unittest\main.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: __all__ is built strangely at line 0 - __future__ (D:\tmp\dev_install_root\Python27_x64\lib\__future__.pyc)

W: delayed __import__ hack detected at line 0 - xml.sax (D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\__init__.pyc)

W: delayed eval hack detected at line 0 - gettext (D:\tmp\dev_install_root\Python27_x64\lib\gettext.pyc)

比如,其中的PIL等库。

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

D:\tmp\dev_install_root\Python27_x64\Lib\site-packages

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

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

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

13.然后再去

D:\tmp\dev_install_root\Python27_x64\Lib\site-packages

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

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

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>pyinstaller.py -F -p D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs;D:\tmp\tmp_dev_root\python\tutorial

_summary\make_exe\BlogsToWordpress\libs\crifan;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsT

oWordpress\libs\thirdparty;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet; ..\BlogsToWordpress\BlogsToWordpress.py

18 INFO: wrote D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\BlogsToWordpress.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:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest

742 INFO: Searching for file msvcr90.dll

743 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll

744 INFO: Searching for file msvcp90.dll

745 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcp90.dll

747 INFO: Searching for file msvcm90.dll

750 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcm90.dll

821 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support\_pyi_bootstrap.py

1531 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\archive.py

1600 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\carchive.py

1672 INFO: Analyzing D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.py

1692 INFO: Analyzing ..\BlogsToWordpress\BlogsToWordpress.py

2903 INFO: Hidden import 'encodings' has been found otherwise

2904 INFO: Looking for run-time hooks

2905 INFO: Analyzing rthook D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support/rthooks/pyi_rth_PIL_Image.py

2917 INFO: Analyzing rthook D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\support/rthooks/pyi_rth_encodings.py

3319 INFO: Warnings written to D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\warnBlogsToWordpress.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-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:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed eval hack detected at line 0 - bdb (D:\tmp\dev_install_root\Python27_x64\lib\bdb.pyc)

W: delayed __import__ hack detected at line 0 - optparse (D:\tmp\dev_install_root\Python27_x64\lib\optparse.pyc)

W: delayed __import__ hack detected at line 0 - PIL.Image (D:\tmp\dev_install_root\Python27_x64\lib\site-packages\PIL\Image.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed exec statement detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: delayed conditional __import__ hack detected at line 0 - doctest (D:\tmp\dev_install_root\Python27_x64\lib\doctest.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: __all__ is built strangely at line 0 - tokenize (D:\tmp\dev_install_root\Python27_x64\lib\tokenize.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - pickle (D:\tmp\dev_install_root\Python27_x64\lib\pickle.pyc)

W: delayed __import__ hack detected at line 0 - encodings (D:\tmp\dev_install_root\Python27_x64\lib\encodings\__init__.pyc)

W: __all__ is built strangely at line 0 - dummy_threading (D:\tmp\dev_install_root\Python27_x64\lib\dummy_threading.pyc)

W: __all__ is built strangely at line 0 - dis (D:\tmp\dev_install_root\Python27_x64\lib\dis.pyc)

W: __all__ is built strangely at line 0 - hashlib (D:\tmp\dev_install_root\Python27_x64\lib\hashlib.pyc)

W: delayed conditional eval hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed conditional __import__ hack detected at line 0 - warnings (D:\tmp\dev_install_root\Python27_x64\lib\warnings.pyc)

W: delayed __import__ hack detected at line 0 - email (D:\tmp\dev_install_root\Python27_x64\lib\email\__init__.pyc)

W: delayed exec statement detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed eval hack detected at line 0 - pdb (D:\tmp\dev_install_root\Python27_x64\lib\pdb.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: delayed conditional exec statement detected at line 0 - iu (D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\PyInstaller\loader\iu.pyc)

W: __all__ is built strangely at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed exec statement detected at line 0 - collections (D:\tmp\dev_install_root\Python27_x64\lib\collections.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.main (D:\tmp\dev_install_root\Python27_x64\lib\unittest\main.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed conditional __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: delayed __import__ hack detected at line 0 - unittest.loader (D:\tmp\dev_install_root\Python27_x64\lib\unittest\loader.pyc)

W: __all__ is built strangely at line 0 - __future__ (D:\tmp\dev_install_root\Python27_x64\lib\__future__.pyc)

W: delayed __import__ hack detected at line 0 - xml.sax (D:\tmp\dev_install_root\Python27_x64\lib\xml\sax\__init__.pyc)

W: delayed eval hack detected at line 0 - gettext (D:\tmp\dev_install_root\Python27_x64\lib\gettext.pyc)

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

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

1834331-20200702101754862-1145534440.png

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

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

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist>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:\Users\CLi\AppData\Local\Temp\_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 "", line 1931, in

File "", line 1655, in main

SystemExit: 2

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist>

加上对应参数,再试试:

D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist>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

1834331-20200702102618814-1652585685.png

# 原文

-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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0>pyinstaller.py -F -p D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs;D:\tmp\tmp_dev_root\python\tutorial

_summary\make_exe\BlogsToWordpress\libs\crifan;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsT

oWordpress\libs\thirdparty;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet; -i ..\BlogsToWordpress\BlogsToWordpress.ico ..\BlogsToWordpress\BlogsToWordpre

ss.py

18 INFO: wrote D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\BlogsToWordpress.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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\build\pyi.win32\BlogsToWordpress\BlogsToWordpress.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:\users\cli\appdata\local\temp\tmpouutgx

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:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\pyinstaller-2.0\BlogsToWordpress\dist\BlogsToWordpress.exe

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

1834331-20200702102659041-603746310.png

总结

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

简单总结其使用方法:

生成单一的exe文件:

pyinstaller.py -F ..\BlogsToWordpress\BlogsToWordpress.py

```

- 添加必要的搜索路径:

````bash

pyinstaller.py -F -p D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet; ..\BlogsToWordpress\BlogsToWordpress.py

```

- 添加必要的搜索路径,且带图标:

````bash

pyinstaller.py -F -p D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\crifan\blogModules;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty;D:\tmp\tmp_dev_root\python\tutorial_summary\make_exe\BlogsToWordpress\libs\thirdparty\chardet; -i ..\BlogsToWordpress\BlogsToWordpress.ico ..\BlogsToWordpress\BlogsToWordpress.py

```

需要注意的是:

1.检查生成的

pyinstaller-2.0\XXX\build\pyi.win32\XXX\warnXXX.txt

(XXX是你的项目名)

中,是否缺少了必要的模块。

如果有缺少的,那么去如上所述,添加必要的搜素路径,使得pyinstaller在运行时,可以找到对应的模块并集成进来。

2.此处我这里没有UPX,暂时没去折腾。

估计是用UPX去压缩,压缩后所生成的exe文件的大小,会小得多。

转自:https://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值