【问题标题】:Is there a way to use PyInstaller inside another .py file?有没有办法在另一个 .py 文件中使用 PyInstaller?
【发布时间】:2012-04-25 23:21:26
【问题描述】:

我的问题如下: 我想创建一个可以创建其他可执行文件的脚本。这些新的可执行文件必须是独立的,因此它们不需要任何 DLL 等。 我知道这可以通过 PyInstaller 实现,但只能通过控制台/命令行。 所以本质上,我想做的是制作一个导入pyinstaller的python脚本,创建另一个.py文件并使用pyinstaller将新脚本编译为.exe,所以没有安装python的人可以使用这个程序。

编辑:脚本本身应该只使用一个文件,因此它也可以是一个文件可执行文件

【问题讨论】:

    标签: python pyinstaller


    【解决方案1】:

    假设您已经在 PYINSTALLER_PATH 中安装了 Pyinstaller(您应该第一次在发行版中调用 Configure.py 脚本),Pyinstaller 通过调用 Makespec.py 从您的主脚本生成一个规范文件。您可以添加一些标志来生成一个 dir 二进制分发或一个文件。最后,您必须使用规范文件调用 Build.py。

    这很容易通过几个系统调用编写脚本。类似的东西:

    import os
    
    PROJECT_NAME = "test"
    PROJECT_MAIN_SCRIPT = "main_script.py"
    MAKESPEC_CMD = """%s %s\Makespec.py -X -n %s -F %s""" % (PYTHON_EXECUTABLE, PYINSTALLER_PATH, PROJECT_NAME, PROJECT_MAIN_SCRIPT)
    BUILD_CMD = """%s %s\Build.py %s.spec""" % (PYTHON_EXECUTABLE, PYINSTALLER_PATH, PROJECT_NAME)
    
    os.system(MAKESPEC_CMD)
    os.system(BUILD_CMD)
    

    您可以避免每次都生成规范文件并对其进行修改,添加嵌入式资源(即 xml 文件或配置)并指定一些其他标志。基本上这是一个python文件,带有一些字典的定义。

    我认为没有可以直接使用的 Pyinstaller 模块,但您可以查看 Build.py 并模仿它的行为来做同样的事情。 Build.py 是主要的脚本。

    【讨论】:

      【解决方案2】:

      你可能想看看cx_Freeze,它可以用来做这种事情。

      有三种不同的方式来使用 cx_Freeze。第一种是使用包含的 cxfreeze 脚本,它适用于简单的脚本。第二个是创建一个 distutils 设置脚本,它可以用于更复杂的配置或保留配置以备将来使用。 第三种方法涉及直接使用 cx_Freeze 内部使用的类和模块,应保留用于复杂的脚本或扩展或嵌入

      Source

      【讨论】:

      • 有没有办法在没有安装脚本的情况下使用 cx_freeze?我希望能够在不安装任何类型的 python 的情况下将 .py 编译为 .exe...
      • 是的,这就是我在引用的段落中强调的内容。您需要获取模块的源代码并直接使用它。
      • 我可以只执行“import cx_Freeze”然后让 main.py 模拟命令行参数吗?所以它会以通常的方式返回所有参数,但它不会从命令行解析它们?
      • 我真的不知道,这不是我尝试过的。我想如果可以从命令行完成,应该可以通过导入 cx_Freeze 从代码中完成。看看它的代码,看看它是怎么做的,应该很容易使用。
      • 那我也遇到了和之前一样的问题,我觉得 PyInstaller 更容易理解了。还是谢谢你
      【解决方案3】:

      尝试下载 Pyinstaller 的最新开发代码。他们在那里尝试实现用于构建可执行文件的 GUI 工具包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多