将自定义.py文件打包到.exe中

时间:2016-11-05 06:19:11

标签: python python-2.7 py2exe pyinstaller

我做了一个小项目,包括将各种python文件导入到另一个python文件中。这是我的目录结构。

Main_Folder
|_ my_main_file.py
|_ Sites (a directory inside Main_Folder)
  |_ __init__.py
  |_ some_other.py

这基本上是我的目录结构。通过以下命令在some_other.py内导入my_main_file.py

from Sites import *

我从该目录导入所有内容。所以,我想要做的是将整个项目变成一个独立的二进制文件。我使用pyintaller将.py文件转换为.exe。但是,我只编写了包含1个文件中所有内容的脚本,这使得任务变得简单。但是,这一次,我试图做一些新的事情。

我的python脚本接受命令行参数,它正在工作。没有命令行参数,python脚本将无法工作。我可以转换为exe,但即使我提出参数,该exe也没有任何作用。

所以,我从pyinstaller获得了一个.spec文件并对其进行了修改以获取我的some_other.py文件。 SPEC文件如下所示:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['my_main_file.py'],
             pathex=['C:\\Users\\User Name\\Main_Folder'],
             binaries=None,
             datas=[('Sites/*.py','Sites')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='my_main_file',
          debug=False,
          strip=False,
          upx=True,
          console=True )

这会产生一个.exe,但是这个exe不会起作用.exe不会显示任何内容。但是,它的大小就像11 MB。有什么事吗? 我尝试了nuitka,但是发现了一个关于无法找到gendef.exe并且我对安装minGW并不感兴趣的错误。

是的,我在64位机器上,py2exe bundle_file:1不能为我工作。

1 个答案:

答案 0 :(得分:3)

我建议你使用cx_Freeze,我认为最好的python代码捆绑器。

安装

安装非常简单,只需从官方PyPi包cx_Freeze installer下载并安装此this onesite,如果您使用的是python 3.4)。完成此操作后,打开cmd并运行python cxfreeze-postinstall

py与exe cx_Freeze

最快的方法是在项目的父目录上打开命令提示符并运行cxfreeze <your .py script>。这将创建一个dist文件夹,其中包含您的主程序及其导入的所有模块。

但是,如果您希望在将代码设置为可执行文件时使用高级选项并选择更多选项,则可以按照here解释setup.py,然后在cmd {{1}中运行}}。与前面的方法不同,它创建了一个名为python setup.py build的目录,其中包含另一个目录,其中包含您正在编译的平台的名称。现在,里面有可执行文件和库。