Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将多个.py文件绑定到单个.exe文件中?_Python_Pyinstaller - Fatal编程技术网

Python 如何将多个.py文件绑定到单个.exe文件中?

Python 如何将多个.py文件绑定到单个.exe文件中?,python,pyinstaller,Python,Pyinstaller,[问题] input: multiple .py files output: a single .exe file [守则] 测试示例: 我有一个main.py+component.py。 [main.py代码] # Import packages import Tkinter from Tkinter import * import tkFileDialog import tkMessageBox #Create dummy function def sh

[问题]

input: multiple .py files
output: a single .exe file
[守则] 测试示例: 我有一个main.py+component.py。 [main.py代码]

 #   Import packages

import Tkinter
    from Tkinter import *
    import tkFileDialog
    import tkMessageBox

#Create dummy function

def showMessage():
import subprocess
execfile("component.py")
#Add button

root = Tkinter.Tk(className="test")
button= Button(root, text="Click", command=showMessage)
button.grid(row=10, column=3, sticky = W + E)
#Pack it

root.mainloop()
[component.py.code]

#Import packages

import Tkinter
from Tkinter import *
import tkFileDialog
import tkMessageBox
#Create dummy function

def showMessage():
tkMessageBox.showinfo('test', 'test.')
showMessage()
[当前结果] exe文件将检查component.py,因为找不到它,所以无法打开msgBox。 注意:我只生成了main.py文件
注意:我使用的是python 2.7.10+pyinstaller 3.0。

考虑使用py2exe模块

py2exe将Python程序转换成包,可以在其他Windows计算机上运行,而无需在这些计算机上安装Python

这里是相同的链接

注意:

Python 2.6、2.7、3.0、3.1

对于Python2.6,您需要的DLL称为MSVCR90.DLL。Py2exe无法在dist目录中自动包含此DLL,因此您必须自己提供它

更复杂的是,这个DLL存在多个版本,每个版本都有相同的文件名。您需要与Python解释器编译时使用的版本相同的版本,即9.0.21022.8版。在完成这些说明的其余部分后,将鼠标悬停在dll文件(或vcredist_x86.exe安装程序可执行文件)上,以确认您获得的版本。您需要VCRESTIOXX86EXE,包含微软Visual C++ 2008可发布的包,发布的是-29—11-2007,因此不是VS2008 SP1(用Python 2.7.1测试)。
对于较早版本的Python,您需要在Visual Studio安装中检查redist.txt,以查看您是否具有重新分发此DLL的合法权利。如果您确实拥有这些权限,那么您可以选择将C运行时DLL与应用程序捆绑在一起。如果您没有权限,则必须让用户在其计算机上运行可再发行的C运行时安装程序

我在python 3中遇到了这个问题。我刚用了冷冻。它可以很好地生成可执行文件,并且可以与setuptools配合使用。它确实给你留下了很多额外的文件。为了解决这个问题,我刚刚开发了一个简单的安装程序,它将所有内容捆绑在一起,并将所有文件安装到“程序文件”中


我使用了Inno设置。它真的很容易使用。我推荐这种方法。与其花费数小时开发单个exe,不如将所有文件捆绑到单个exe安装程序中,该安装程序将所有文件安装到正确的位置。Ino安装程序甚至有一个安装向导为你做任何事情。

你可以考虑使用Py2ExcEng.我理解你的观点,同时应用程序是用Python2.7.10编写的,py2exe至少支持Python3。尽管如此,我会继续挖掘…请看一看我添加的便条。谢谢。同时,我发现了一个解决方案,即将组件.Py视为一个单独的模块。换句话说:“从组件导入showMessage”。我会玩一点这个,如果我在其他情况下绊倒,有机会我会转移到其他安装程序。