【问题标题】:15 Python scripts into one executable?15 个 Python 脚本到一个可执行文件中?
【发布时间】:2014-01-23 23:46:06
【问题描述】:

我整天都在修补这里和这里的解决方案:

How would I combine multiple .py files into one .exe with Py2Exe

Packaging multiple scripts in PyInstaller

但它并没有像我想象的那样工作。

我有一个过去 6 个月一直在开发的程序,我刚刚将其中一个功能提供给了另一位使用 Python 工作的开发人员。

我想做的是使用他的脚本,而不需要用户下载和安装 python。

我看到的问题是 1 个 python 脚本调用其他 14 个 python 脚本来执行各种任务。

那么我要问的是最好的方法是什么?

是否可以将 15 个脚本及其所有依赖项打包成 1 个我可以正常调用的 exe?还是有另一种方法可以将初始脚本打包成 exe 并且该 exe 可以正常调用 .py 脚本?还是我应该直接说 f' 并在我的安装文件中包含一个 python 安装程序?

这适用于 Python 2.7.6 顺便说一句

这就是初始脚本调用其他脚本的方式。

import printSub as ps
import arrayWorker as aw
import arrayBuilder as ab
import rootWorker as rw
import validateData as vd
etc...

如果这是您尝试合并这些脚本,您会怎么做?

谢谢

【问题讨论】:

    标签: python python-2.7 exe executable


    【解决方案1】:

    你真的可以使用 py2exe,它的行为是你想要的。

    查看上述问题的答案: How would I combine multiple .py files into one .exe with Py2Exe

    通常,py2exe 将您的主脚本捆绑到 exe 文件和所有依赖脚本(它解析您的导入并找到所有必要的 python 文件)到库 zip 文件(仅限 pyc 文件)。它还收集依赖的 DLL 库并将它们复制到分发目录,以便您可以分发整个目录,并且用户可以从该目录运行 exe 文件。好处是您可以拥有大量脚本(较小的 exe 文件)来使用一个大型库 zip 文件和 DLL。

    或者,您可以配置 py2exe 以将所有脚本和要求捆绑到 1 个独立的 exe 文件中。 exe文件由主脚本、依赖的python文件和所有的dll组成。我在 setup.py 中使用这些选项来完成此操作:

    setup( 
      ...
      options = {         
        'py2exe' : {
            'compressed': 2, 
            'optimize': 2,
            'bundle_files': 1,
            'excludes': excludes}
            },                   
      zipfile=None, 
      console = ["your_main_script.py"],
      ...
    )
    

    工作代码:

    from distutils.core import setup
    import py2exe, sys, os
    
    sys.argv.append('py2exe')
    setup( 
      options = {         
        'py2exe' : {
            'compressed': 1, 
            'optimize': 2,
            'bundle_files': 3, #Options 1 & 2 do not work on a 64bit system
            'dist_dir': 'dist',  # Put .exe in dist/
            'xref': False,
            'skip_archive': False,
            'ascii': False,
            }
            },                   
      zipfile=None, 
      console = ['thisProject.py'],
    )
    

    【讨论】:

    • 另一方面,py2exe news page 表示最后一次发布大约是八年前。你确定 PyInstaller 不会削减它,因为 py2exe 似乎或多或少已经死了。
    • @Jiri 出于某种原因,您的代码无法正常工作。我是使用 wxpython 模块。有什么我应该做的不同的事情吗?
    • @JeshKundem 很难说没有更多信息。您可以打开带有详细信息的新问题,我会尽力回答:)
    【解决方案2】:

    在 setup.py 之后(在源目录中):

    from distutils.core import setup
    import py2exe
    
    setup(console = ['multiple.py'])
    

    然后运行为:

      python setup.py py2exe
    

    对我来说很好。我无需提供任何其他选项即可使其与多个脚本一起使用。

    【讨论】:

    • 我收到IndexError: tuple index out of range。也许你知道是什么原因造成的?
    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多