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

Posted

技术标签:

【中文标题】cx_Freeze 与 python 包(不仅仅是一个模块)【英文标题】:cx_Freeze with python packages (not just one module) 【发布时间】:2017-02-02 21:49:33 【问题描述】:

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

这是我的目录:

test1/
  __init__ 
  __main__

我从命令行运行它的方式是使用以下 cmd

python -m test1 

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

这是我的setup.py win64

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】:

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

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

所以做这样的事情:

test1/
  __init__ 
  __main__
run_test.py

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

import test1
run_the_whole_thing()

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

【讨论】:

这实际上是我所做的。无论如何感谢您的帮助!

以上是关于cx_Freeze 与 python 包(不仅仅是一个模块)的主要内容,如果未能解决你的问题,请参考以下文章

cx_Freeze 的熊猫分析问题

Python 2.7 Cx_Freeze: ImportError: No module named __startup__

Python 2.7 Cx_Freeze: ImportError: No module named __startup__

与 cx_freeze 捆绑后,Flask 应用程序应请求挂起

cx_Freeze:找不到文件/目录 icon.gif

cx_freeze 问题与 mac 上的相对路径