Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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
如何执行一个";g++&引用;Heroku中Python服务器上的命令?_Python_C++_Heroku - Fatal编程技术网

如何执行一个";g++&引用;Heroku中Python服务器上的命令?

如何执行一个";g++&引用;Heroku中Python服务器上的命令?,python,c++,heroku,Python,C++,Heroku,我正在尝试将Python服务器部署到Heroku,我需要在其中一个库上执行“g++”命令,以便将其安装到服务器上 我想创建一个gunicorn和Flask服务器,通过跨语言模型pretaining托管facebook的XLM模型: 该模型需要“fastBPE”库(),该库需要与以下命令一起安装: g++-std=c++11-pthread-O3 fastBPE/main.cc-IfastBPE-o fast 但是,由于Heroku服务器是为Python配置的,因此它无法识别“g++”命令 以下是

我正在尝试将Python服务器部署到Heroku,我需要在其中一个库上执行“g++”命令,以便将其安装到服务器上

我想创建一个gunicorn和Flask服务器,通过跨语言模型pretaining托管facebook的XLM模型:

该模型需要“fastBPE”库(),该库需要与以下命令一起安装: g++-std=c++11-pthread-O3 fastBPE/main.cc-IfastBPE-o fast

但是,由于Heroku服务器是为Python配置的,因此它无法识别“g++”命令

以下是我迄今为止所做的尝试: -在heroku中添加buildpack“heroku buildpack apt”,并在我的源文件中创建一个“Aptfile”,在其中写入“g++”,以及“build essential” -在主python文件中,我创建了一个子进程来启动“apt get install g++”:

导入子流程
process=subprocess.Popen(“apt get install g++”,shell=True,stdout=subprocess.PIPE,stderr=subprocess.stdout)
(output,err)=process.communicate()
#这使得等待成为可能
p_状态=进程。等待()
#这将给出正在执行的命令的输出
打印(“命令apt get output:”,输出)
但是,每当我运行以下子流程来安装fastBPE包时:

导入子流程
process=subprocess.Popen(“g++-std=c++11-pthread-O3-tools/fastBPE/fastBPE/main.cc-IfastBPE-o-tools/fastBPE/fast”,shell=True,stdout=subprocess.PIPE,stderr=subprocess.stdout)
(output,err)=process.communicate()
p_状态=进程。等待()
打印(“命令apt get output:”,输出)
我系统地将“g++:未找到”作为输出


另外,命令“which g++”不返回任何内容,但“which gcc”返回/usr/bin/gcc”,因此安装了gcc,但没有返回g++

我最终设法找到了答案

对于子孙后代,有两种解决方案对我有效:

1-不太好的方法是在与Heroku服务器环境完全相同的Linux计算机上执行g++命令,将其推送到Heroku,并确保以后再也不修改它。然后,您可以使用上面的子流程调用fastBPE==>它可以工作,但它更像是一个DIY不稳定的解决方案。关联的GitHub主文件为

2-最好的解决方案是使用Miniconda环境在Docker容器上预编译所有内容,您可以安装并运行所有必要的命令,然后轻松地将其推送到heroku。您可以在此处找到我使用的Dockerfile:

旁白:您几乎肯定不应该在构建时编译此库。它需要在部署期间完成,否则,由于Heroku的临时文件系统,每次dyno重新启动时,它都会丢失。这肯定也行不通:“在主python文件中,我创建了一个子进程来启动“apt get install g++”。
Aptfile
方法很可能是从这里开始的。嗨,克里斯,在部署时我看不到任何方法可以做到这一点。我的策略是,如果我在主脚本开始时启动编译,即使Dyno重新启动,它也会在每次安装脚本中运行,并编译fastBPE库。这在启动时似乎需要做很多工作。它将延迟重新启动,这基本上是一个构建任务。您可能需要使用自定义构建包,例如,通过分叉官方Python构建包。