0%

windows下python转exe

不知道你们有没有遇到过想把python转exe,又担心带了一大堆dll依赖库,给别的小朋友跑不了的经历?pyinstaller是可以打包成干净利落的一个exe的。当然网上有人说不支持python 3.5以上,不过我是python3.7也用的很正常,如果有遇到问题的欢迎给我留言,让我完善我的教程~

  1. 安装pyinstaller: pip install pyinstaller

  2. 如果报错,最底下往上数几行有个error: Microsoft Visual C++ 14.0 is required:

    输入pip install –upgrade setuptools,再重新做第一步就行了

  3. pyinstaller –onefile 1.py(改成你的py文件名)

    –onefile就是打包成1个exe的意思,不写的话会有一个文件夹的dll库

    如果你看到

    1769 INFO: Appending archive to EXE D:\prog10\Desktop\dist\1.exe

    1893 INFO: Building EXE from EXE-00.toc completed successfully.

    这种就说明成功了。一般在你的目录的dist文件夹里有个exe。

  4. 如果没成功的话,在同目录下dist文件夹旁边应该还有个build文件夹,里边有个文件夹1(就是你的py文件名),里边有个warn-1.txt,里边写了很多missing module named …,一个个试着用pip install装一下,比如

    missing module named resource - imported by posix (top-level), D:\prog10\Desktop\1.py (top-level)

    就写pip install resource

    如果装不上没关系,因为有的库就是不支持windows的,比如有个

    missing module named posix - imported by os (conditional, optional), D:\prog10\Desktop\1.py (top-level)

    这个本身就是跟posix系统对接的库,windows肯定没有了,不过pyinstaller并不清楚(它是个跨平台的能给win,linux,mac打包,并不是专门为windows设计的),所以装不上也没关系,装下一个就是了。

    • 注意不要把所有库一股脑输到pip install 后面,比如我这样:

      pip install resource posix _posixsubprocess ‘org.python’ clr IronPythonConsole StringIO win32evtlogutil win32evtlog System sets startup console _frozen_importlib _frozen_importlib_external _winreg _scproxy ja va ‘java.lang’ vms_lib termios grp org pwd

      因为pip有个库安装失败了剩下的就不装了…

    顺便一提,如果觉得装那么多不舒服的,可以开个virtualenv隔离一下,这样里边的库就不会影响外边了

    1. pip install virtualenv

    2. cd到一个目录然后virtualenv –no-site-packages venv(或者把venv换成你自己起个名字)

      –no-site-packages是创建崭新虚拟机,不带任何库进入新的虚拟机,如果不想这样可以去掉这个参数。

    3. source venv/bin/activate启动虚拟机,之后你的python就只能用里边的库,pip装的库也只在里边。

    4. deactivate离开虚拟机