2017-11-25 8 views
1

python CGIスクリプトを含む単純なpython localhostサーバーを作成しました。 CGIはユーザー検索に基づいてhtmlを返します。Pythonを使用しないユーザー向けにPython EXEを作成する - サーバーCGIを処理できる

ユーザー用のローカルホストを作成し、(pythonをインストールせずに)python CGIスクリプトを実行できるコンパイルバージョンを作成したいと考えています。

私はpyinstallerを使用してサーバープログラムのexeファイルを作成しました。しかし、CGIが呼び出されると、まだコンパイルされていないPython(ユーザーのマシンにはない)を実行しようとしています。

PythonをインストールせずにCGIをユーザーに提供する方法について考えていますか?

+1

あなたはこれらの手順のすべてを行いましたhttp://www.py2exe.org/index.cgi/Tutorial – user1767754

+0

最初にpy2exeを試しましたが、3.5と互換性がありません。そこで私はpyinstallerに切り替えました。 py2exeの3.4から3.5にlibパッケージの名前を変更するというトリックも試みましたが、うまくいきませんでした。 –

答えて

0

私は、この手順を経て仕事を得ることができました:

  1. 使用フラスコの代わりに、簡単なHTMLサーバー(CGIHTTPRequestHandlerではを)。これは静的なファイルを提供するための巨大な過剰ですが、機能します。フラスコはCGIと同様に情報を受け取ることができるので、最小限のリファクタリングが必要でした。request.args.get
  2. pyinstallerを使用してコンパイルします。これは最初は機能しませんが、[あなたのapp] .specファイルを生成します。 https://www.quora.com/Can-I-convert-a-Flask-application-into-an-executable-file-that-runs-on-Windows-like-an-exe-file(ここでは間違いなくいくつかのブードゥー教が、それは働く!)私は必要な追加のディレクトリ内

  3. を追加しました(検索インデックス)Aで:specファイルこのページの指示に従って、追加のデータを含めることを細工

  4. .datas呼び出し。

  5. .pyファイルの代わりに変更されたspecファイルを使用して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") 
関連する問題