cx_freeze打包Python程序
由于py2exe和pyinstaller不支持Python3,cx_freeze成为了比较常用的替代品。但是cx_freeze在直接使用中会遇到一些问题。以下记录两条今天打包时遇到的问题和解决方法。
###AttributeError ‘module’ object has no attribute ‘_fix_up_module’错误
这是cx_freeze在Python3.4版本后使用会遇到的一个问题。根据StackOverflow上的问题,需要到此处下载打过补丁解决了这个问题的版本。
下载得到的是pip的wheel包,使用pip install cx_freeze-blahblah.whl
来安装。Script目录下放置的cx_freeze是*nix风格的shebang脚本,自行调用Python执行即可。
###NameError: global name ‘__file__‘ is not defined 错误
脚本打包后由于不再是由Python解释脚本的形式运行,__file__
变量会失去作用。此时具有类似效用的是sys.executable
,同时可以利用sys.frozen
属性来判断是打包的exe还是py脚本。需要使用类似以下的代码:
1 | if hasattr(sys, 'frozen'): |