我有一个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位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)