将15个Python脚本合并成一个可执行文件?

6
我整天都在尝试这里和这里的解决方案: 如何使用Py2Exe将多个.py文件合并为一个.exe 在PyInstaller中打包多个脚本 但是它并没有按照我想象的那样完美地运行。
我有一个程序,已经开发了6个月,现在我把其中一个功能分配给了另一个用Python编写的开发人员。
我的目标是使用他的脚本,而不需要用户下载和安装Python。
问题在于一个Python脚本调用其他14个Python脚本来完成各种任务。
所以我的问题是,最好的方法是什么?

是否有可能将15个脚本及其所有依赖项打包成一个可正常调用的exe文件?还是说我可以将初始脚本打包成一个exe文件,然后该exe文件可以正常调用.py脚本?或者我应该直接在我的设置文件中包含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...

如果您想将这些脚本整合到您的项目中,您会如何处理?
谢谢。
2个回答

3
您可以真正使用 py2exe,它的表现与您想要的一样。
请参见以下问题的答案: 如何使用Py2Exe将多个.py文件合并为一个.exe文件 通常情况下,py2exe将您的主要脚本打包到exe文件中,并将所有相关脚本(它会解析您的import语句并找到所有必要的python文件)打包到库zip文件中(仅有pyc文件)。此外,它收集依赖的DLL库并将它们复制到分发目录,因此您可以分发整个目录,并且用户可以从该目录运行exe文件。好处是您可以拥有大量小型脚本 - 较小的exe文件 - 以使用一个大型库zip文件和DLL。
或者,您可以配置py2exe将所有脚本和依赖项捆绑到一个独立的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新闻页面表示最后一次发布已经约有八年时间了。你确定PyInstaller不行吗?因为py2exe似乎已经死了。 - Frerich Raabe
@Jiri,由于某些原因,你的代码无法正常工作。我正在使用wxpython模块。我应该做些什么不同的事情吗? - Jesh Kundem
@JeshKundem 没有更多的信息很难说。您可以提供详细信息并开启新问题,我会尽力回答 :) - Jiri

0

在源目录中的setup.py文件如下:

from distutils.core import setup
import py2exe

setup(console = ['multiple.py'])

然后以以下方式运行:

  python setup.py py2exe

对我来说很好用。我不需要提供任何其他选项就可以让它与多个脚本一起工作。


我得到了 IndexError: tuple index out of range 错误。也许你知道这是什么原因引起的? - picklepirate28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接