我有一个Python脚本,然后我通过pyinstaller2.0运行它来生成它的二进制文件.
python pyinstaller -F /path/to/python/script
在运行二进制文件时,它默认使用/ tmp文件夹来保存它的临时文件并运行安装程序.这在普通服务器和VPS上工作正常.但是,在禁用/ tmp的服务器上尝试安装(/ tmp noexec)时,安装将失败.
我的问题如下:
>运行二进制文件时,如何启用另一个临时位置? pyinstaller有这样的选择吗?
>如果我编写代码来创建临时位置并将其导出到python脚本中的PATH,那么无论如何都不会尝试使用default / tmp来运行python二进制文件吗?
>我想到的另一种方法是在bash中编写一个shell脚本,创建一个临时位置,导出其PATH,然后调用python二进制文件,运行后,从PATH中删除temp的位置,并删除临时文件夹 – 但是这似乎是一种迂回的方式来完成它.有更好的解决方案吗?
>在pyinstaller文件夹下,查找/ path / to / pyinstaller / sources / common下的launch.c文件
>查找名为int getTempPath(char * buff)的函数
>在它下面,删除对静态const char * envname []的引用(它们是声明,并且在同一个函数中有一个for循环)
>将static const char * dirname []的值更改为所需的值.
因此,函数看起来像这样:
int getTempPath(char *buff)
{
static const char *dirname[] = {
"/usr/local/src/temp","/usr/local/src","/usr/src",0
};
int i;
char *p;
for ( i=0; dirname[i]; i++ ) {
strcpy(buff,dirname[i]);
if (testTempPath(buff))
return 1;
}
return 0;
}
使用以下命令重新编译pyinstaller源:
python ./waf configure –no-lsb build install
要运行它,首先安装python-devel软件包(yum install python-devel -y),否则抛出并且找不到Python.h的错误
现在,当我们通过pyinstaller运行python脚本时,将使用新的temp local.感谢@devnull指出我正确的方向.