rah*_*huL 5 python bash pyinstaller
我有一个Python脚本,然后我通过pyinstaller2.0运行它来生成它的二进制文件.
python pyinstaller -F /path/to/python/script
Run Code Online (Sandbox Code Playgroud)
在运行二进制文件时,它默认使用/ tmp文件夹来保存它的临时文件并运行安装程序.这在普通服务器和VPS上工作正常.但是,在禁用/ tmp的服务器上尝试安装(/tmp noexec)时,安装将失败.
我的问题如下:
从PyInstaller V3.3 (2017-09-21) 开始, 您可以使用--runtime-tmpdir参数来更改默认提取路径,即:
--runtime-tmpdir PATH
Run Code Online (Sandbox Code Playgroud)
在 onefile-mode 中提取库和支持文件的位置。如果给出此选项,
bootloader则将忽略运行时操作系统定义的任何临时文件夹位置。该_MEIxxxxxx-folder会在这里产生。请仅在您知道自己在做什么时才使用此选项。
@devnull 建议的解决方案确实是在 pyinstaller 的脚本中进行更改。该脚本对临时位置进行了硬编码,因此我在那里进行了更改。因此,以下是遵循的步骤:
launch.c下面的文件/path/to/pyinstaller/sources/commonint getTempPath(char *buff)static 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;
}
Run Code Online (Sandbox Code Playgroud)
sources使用以下命令重新编译 pyinstaller :
python ./waf configure --no-lsb build install
要运行它,首先安装python-devel软件包(yum install python-devel -y),否则它会抛出错误Python.h isn't found
现在,当我们通过 pyinstaller 运行 python 脚本时,将使用新的临时本地变量。感谢@devnull 为我指明了正确的方向。