python代码想要像C语言一样编译得到exe文件可能要稍微麻烦一点,不过也还好,python中有一个第三方包pyinstaller
可以较为方便地将py文件转换成exe文件。使用时直接在控制台输入pyinstaller <filename.py>
即可,当然,一般会加上一些参数,常用的参数如下所示。
-F
: 生成单个可执行文件-w
: 去掉控制台窗口-c –console, –nowindowed
: 使用控制台,无界面(默认)-p
: 自定义需要加载的类路径-i
: 可执行文件的图标,其后面可以加上图片的路径-D –onedir
: 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
这些参数可以直接加在命令的后面即可。
打包程序有一点需要注意,那就是如果电脑上安装的包非常多,那么最后打包的执行程序体积也就越大,所以建议使用虚拟环境,具体操作可以查看这篇文章。
此外,通过这个模块打包的执行程序只能适用于win10,如果要在win7上运行,需要使用python3.8及以下的python版本。【参考链接】
如果项目中包含多个文件夹,且外面的文件需要import里面的文件,在使用时需要以文件夹名.文件名
的方式。而如果文件夹里面的文件也有相互引用的话,也要以文件夹名.文件名
这样的方式,而不是直接用相对路径。而且不需要使用sys.path.append()来添加子文件夹路径。不过里面的调用外面的目前还没研究明白,这种情况也比较少见。
如果项目中调用了C语言编译生成的dll文件,那么在导出成执行程序时,一定要加上dll文件,这里是使用参数--add-data
,要注意这后面的参数,以分号分隔,前面为需要添加的对象,后面是添加到的位置,二者要用引号,否则分号会被识别为命令的分隔!
举个例子:某个项目结构如下所示:
|-- main.py
|-- dlls
| |-- a.dll
| |-- a1.dll
| |-- dll.py
| |-- other
`-------|-- b.dll
那么在main.py和dll.py中引用a.dll应该都以dlls/a.dll
这样的路径来引用,b.dll都以dlls/other/b.dll
这样的方式引用,即都以最外层文件夹作为参考。然后在导出时,就添加参数 --add-data "dlls/*;." --add-data "dlls/other/b.dll;."
没错,这里的DEST都是当前路径.
。