cx_Freeze与python包(不只是一个模块)

时间:2017-02-02 21:49:33

标签: python windows python-3.x executable cx-freeze

所有cx_Freeze示例都适用于一个文件(模块)。我需要为整个python包制作一个可执行文件。为什么这很难?

这是我的目录:

test1/
  __init__ 
  __main__

我从命令行运行此方法的方法是使用以下cmd

python -m test1 

__init__为空,__main__只有一个简单的print语句。 我正在使用python 3.5.1但我可以切换到python 3.4,如果这将解决问题

这是win64的setup.py

from cx_Freeze import setup, Executable
import sys

build_exe_options = {"packages": ['test1'],
                     "include_files": []
                    }
executables = [
                Executable("__main__")
              ]
setup(
    name = "Foo",
    version = "0.1",
    description = "Help please!",
    author = "me",
    options = {"build_exe": build_exe_options},
    executables = executables
)

更新: 1-请参阅下面的评论以获得此方法的解决方案 2-切换到pyinstaller,因为它可以生成一个exe文件而不是文件夹

1 个答案:

答案 0 :(得分:1)

冻结整个包没有意义,因为要创建可执行的二进制文件,您需要一个可以从命令行运行 standalone 的Python脚本。包通常不是开箱即用的,而是由另一个模块导入。

但是,您始终可以在脚本中导入包,因此当您冻结它时,包将包含在您的发行版中。

所以做这样的事情:

test1/
  __init__ 
  __main__
run_test.py

run_test.py 现在导入test1并启动您可以执行任何操作的函数。

import test1
run_the_whole_thing()

注意:您需要将 setup.py 中的可执行文件更改为run_test.py