加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用pyinstaller的备用/ tmp位置

发布时间:2020-12-16 21:46:47 所属栏目:Python 来源:网络整理
导读:我有一个Python脚本,然后我通过pyinstaller2.0运行它来生成它的二进制文件. python pyinstaller -F /path/to/python/script 在运行二进制文件时,它默认使用/ tmp文件夹来保存它的临时文件并运行安装程序.这在普通服务器和VPS上工作正常.但是,在禁用/ tmp的服

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读