为没有python的用户创建一个python exe - 可以处理服务器CGI

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为没有python的用户创建一个python exe - 可以处理服务器CGI相关的知识,希望对你有一定的参考价值。

我编写了一个包含python CGI脚本的简单python localhost服务器。 CGI基于用户搜索返回html

我想构建一个为用户创建本地主机的编译版本,并让他们运行python CGI脚本(不安装python)。

我使用pyinstaller来创建服务器程序的exe。但是,当调用CGI时,它仍然试图运行未编译的python(用户的机器不会有)。

有关如何在不安装python的情况下为用户提供CGI的任何想法?

答案

我能够通过以下步骤使这个工作:

  1. 使用flask而不是简单的HTML服务器(CGIHTTPRequestHandler)。这对于提供静态文件来说是一个巨大的过度杀伤,但它确实有效。它需要最少的重构,因为flask可以使用:request.args.get获取类似于CGI的信息
  2. 使用pyinstaller编译。这首先不起作用,但生成[您的应用程序] .spec文件。
  3. 篡改spec文件,在此页面上按说明包含其他数据:https://www.quora.com/Can-I-convert-a-Flask-application-into-an-executable-file-that-runs-on-Windows-like-an-exe-file(这里肯定是一些伏都教,但它有效!)
  4. 在a.datas调用中添加了我需要的其他目录(搜索索引)。
  5. 使用修改后的spec文件而不是.py文件重新启动pyinstaller。

在步骤3中添加的代码(这是quora链接中的图片)

         hiddenimports=['email','email.message',
            'email.mime.message', 'email.mime.image',
            'email.mime.text', 'email.mime.multipart',
                'email.mime.audio', 'email.mime.multipart',
           ],

def extra_datas(mydir):
     def rec_glob(p,files):
         import os
         import glob
         for d in glob.glob(p):
             if os.path.isfile(d):
                 files.append(d)
             rec_glob("%s/*" % d, files)
     files = []
     rec_glob("%s/*" % d, files)
     extra_datas = []
     for f in files: 
         extra_datas.append((f, f, 'DATA'))
     return extra_datas

#include our data directories
a.datas += extra_datas("static")
a.datas += extra_datas("templates")

以上是关于为没有python的用户创建一个python exe - 可以处理服务器CGI的主要内容,如果未能解决你的问题,请参考以下文章

python 实现v2ex的自动登录并签到

Redis Python开发指南

python-文件锁

Python自动化开发-EX03(购物车实现)

如何使用python将长音频(EX:1小时)文件拆分为多个短长度(5s)音频文件

Python用户终端输入