python– 使用pyinstaller的备用 tmp位置

python– 使用pyinstaller的备用 tmp位置,第1张

概述我有一个Python脚本,然后我通过pyinstaller2.0运行它来生成它的二进制文件.python pyinstaller -F /path/to/python/script 在运行二进制文件时,它默认使用/ tmp文件夹来保存它的临时文件并运行安装程序.这在普通服务器和VPS上工作正常.但是,在禁用/ tmp的服务器上尝试安装(/ tmp noexe

我有一个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的位置,并删除临时文件夹 – 但是这似乎是一种迂回的方式来完成它.有更好的解决方案吗?最佳答案@devnull建议的解决方案确实是在pyinstaller的脚本中进行更改.该脚本具有硬编码的临时位置,因此我在那里进行了更改.所以这是以下步骤:

>在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指出我正确的方向.

总结

以上是内存溢出为你收集整理的python – 使用pyinstaller的备用/ tmp位置全部内容,希望文章能够帮你解决python – 使用pyinstaller的备用/ tmp位置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存