我使用PyInstaller将两个脚本转换为一个可执行文件,其中一个调用另一个。我遇到的问题是我无法弄清楚如何捆绑两个脚本,仍然让他们相互引用:在PyInstaller中打包多个脚本
导致问题的代码是一个脚本,script1.py
包含:
subprocess.call(['gksudo','python script2.py'])
这很好,当我正常运行脚本,但一旦他们打包在PyInstaller我不知道如何使电话工作。
我使用PyInstaller将两个脚本转换为一个可执行文件,其中一个调用另一个。我遇到的问题是我无法弄清楚如何捆绑两个脚本,仍然让他们相互引用:在PyInstaller中打包多个脚本
导致问题的代码是一个脚本,script1.py
包含:
subprocess.call(['gksudo','python script2.py'])
这很好,当我正常运行脚本,但一旦他们打包在PyInstaller我不知道如何使电话工作。
我不认为pyinstaller可以自己处理这种捆绑,至少我没有设法配置它,如果可能的话。我也有一个相当大的应用程序在何处
subprocess.Popen几个电话( '蟒蛇' ......)
完成。我终于做到了工作方式是:
修改您的通话子到不同的蟒蛇,就像subprocess.call(['gksudo','./python script2.py'])
。创建两个单独的分析,一个为切入点,以及一个用于脚本的其余部分,你的情况:
A1 - script1.py分析 A2 - script2.py的分析
创建只有从入口点脚本的exe:
pyz = PYZ(a1.pure)
exe = EXE(pyz,
a1.scripts,
exclude_binaries=1,
name={name here},
debug=False,
strip=False,
upx=True,
console=1)
所有脚本收集
coll = COLLECT(exe,
a1.binaries,
a1.zipfiles,
a1.datas,
a2.binaries,
a2.zipfiles,
a2.datas,
python_tree,
*additional_trees,
strip=False,
upx=True,
name={})
在您的那个在与没有被pyinstaller发现任何附加要求所有子进程调用指定的位置分配复制蟒蛇(我有几个像matplotlib,pylab等)
创建一个启动脚本,首先改变任何所需的环境变量指向你的包,然后启动应用程序。在我的情况下,需要的是,从调用目录:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
export LD_RUN_PATH=`pwd`:$LD_RUN_PATH
现在,所有的这些,如果我想在机器上,要么有没有安装Python或如果他们已经安装了Python运行应用程序被要求,请确保应用程序仍使用分发包中的所有库而不是任何本地库。如果你的情况python已经安装在目标机器上,我不认为像这样的任何东西是必要的,前3步就足够了。