我使用Pyinstaller编写一个应用程序,它在目标机器和一些软件包上安装Python。在应用程序结束时,我应该生成一个Python脚本,然后使用subprocess.Popen()
。但是,似乎脚本无法执行它,因为它似乎仍然使用应用程序的(pyinstaller&#39)运行时环境。但是,在安装工作之后运行生成的脚本是独立的。
有没有办法在pyinstaller的上下文之外生成一个进程?
答案 0 :(得分:0)
只需分享一些我针对此问题(至少对于我的用例而言)的方法即可。
第一种方法是在安装过程中生成的结果脚本中,如果它为空(即当前目录),我会明确删除PYTHONPATH
中的第一个条目。这样可以确保首先加载当前上下文之外的必要Python库(PyInstaller引导程序)。即
if not sys.path[0]:
sys.path.pop(0)
对于第二种方法,存在LD_LIBRARY_PATH
环境变量引用提取的安装程序目录的实例。通常会在Linux中发生,我会将修改后的环境变量设置为subprocess.Popen()
,其中LD_LIBRARY_PATH
被删除。
pip_env = os.environ
if 'LD_LIBRARY_PATH' in pip_env:
pip_env.pop('LD_LIBRARY_PATH')
subprocess.call("<command here>", shell=True, env=pip_env)
但是请注意使用上述方法。尽管它适用于我的用例,但可能会导致其他用例出现意外问题。