pyinstaller exe没有任何依赖?

时间:2017-08-15 15:55:37

标签: python dependencies pyinstaller

所以我在python27上使用pyinstaller,只要它与build文件夹位于同一目录下,我的exe就能很好用。我需要它是一个完全独立的exe,没有任何依赖,是否有办法将重要的东西从build文件夹捆绑到一个文件中? -F和--onefile都没有这样做。

编辑:正如我在下面的回答中解释的那样,我认为pyinstaller是问题,因为exe只会在dist文件夹中运行,所以我认为它有依赖关系,但实际上,它正在运行,然后立即崩溃到期到一个只在exe在桌面上时触发的错误。

2 个答案:

答案 0 :(得分:1)

我发现它不工作的原因与pyinstaller或dll无关。 exe正在打开,并尝试通过python输入powershell命令,就像它应该的那样。不幸的是,我有一行代码说:

subprocess.check_output('schtasks /create /sc minute /mo ' + str(time) + ' /tn "test_process_to_run_every_'+str(time)+'_min" /tr //'+sys.argv[0],shell=True)
#set this exe to run every X minutes in windows scheduled tasks

问题是当我将exe放在桌面上时sys.argv [0]发生了变化,最终变成了一个看起来像C:// Users / John Smith / Desktop的路径。约翰和史密斯之间的空间使得powershell疯狂并且崩溃了程序,所以我使用这行代码逃脱了它:

path = sys.argv[0].replace(" ","^")

然后我用我的新路径变量替换了sys.argv [0]。希望这有助于将来尝试做同样的事情。

答案 1 :(得分:0)

pyinstaller将您的脚本转换为.exe后,需要将executable添加到path,否则您必须打开command line该文件所在的目录。pyinstaller只是将您的scriptpy interpretor放入一个文件中。同样适用于linux。

对于依赖方,请查看here

还有其他选项可以尝试bbFreeze,py2exe,cx_Freeze

以简单的方式使用pyinstaller:

pyinstaller --onefile your_file.py

现在你应该看到几个文件build,dist(exe在这里)。

注意:--onefile标志不一定要求它与某些库有链接,它仍然需要那些才能运行。

准备分发,首先需要获取spec文件:

获取spec文件:     pyinstaller --noconsole your_file.py

比你可以得到exe文件分发如下:

pyinstaller your_file.spec

了解更多信息和教程外观here

看看nuitka是否对您有用,听起来可能有些可怕,但事实并非如此。它将您的代码编译为可执行的二进制格式。请注意,首先它会转换为c ++ API调用。

如果您不喜欢使用Cython的封闭源程序,并且不依赖使用py2exe