プログラマが恐れているものがあるとすれば、それはおそらく、ニーズが再び変化したことだと思います!
いいえ、作者がブラウザベースの Web アプリケーションを開発した後、顧客は次のように言いました: Program It内部 (いいえ) 内部 (ネットワーク) 環境で実行する必要があります...
これは、Python 環境をインストールできないことを意味します!
誰が私たちをプログラマーと呼びますか? GUI を開発してみませんか?いいえ、問題ありません...
しかし、時間を聞いてからはもう落ち着くことができません...
お客様の評価に影響を与えないために
GUI を作成するのは難しくありませんが、サービスとユーザーとの対話型インターフェイスを整理する必要があります。そうでない場合は、 GUI 用に別のインターフェイスを作成する必要がありますが、明らかに時間が足りません。
いいえ、別の方法を考えてください...
それ以外の場合は、Web アプリケーションを実行可能プログラムにパッケージ化し、それをマシンにコピーして実行します。同様のフレームワークが多数あります。 Python の Nodejs.Electron[1]、Pywebview[2]。
元の Web プログラムをラップして、実行するだけです!
Web プログラムは Flask で開発されているため、パッケージ化として Python をインストールする必要があります Pywebview道具。
仮想環境 [3] を作成するか、元の Web プロジェクト環境で次のコマンドを実行します。
pip install pywebview
Windows システムでは、.Net 4.0 以降が必要です
試してみる:
import webview window = webview.create_window('Hello!', 'http://http://www.justdopython.com') webview.start()
次の効果が確認できます。
まずは試してください。
これは素晴らしいです!
Pywebview は、シンプルな 3 つのモードをサポートしています。モード、サーバーモード、スレッドモード。
シンプルモードはストリーミングブラウザをカスタマイズしたものに相当し、上記例のようにアドレスを指定して閲覧することができます。
サーバー モードは、Web アプリケーションをパッケージ化することと同じです。つまり、ローカル サーバーを起動し、カスタマイズされたブラウザで閲覧します。
スレッド モードはより高度です。つまり、より高度なゲームプレイを実現するには、スレッドのステータスを手動で維持する必要があります。
現在のニーズに合わせて、ローカル Web アプリケーションをパッケージ化するサーバー モードを選択します。
サーバー モードでは、Web アプリケーションがデプロイされている限り、HTTP サーバーが提供されます。
実際のプロジェクトのコードを示しているだけなので、ここでは簡単な Flask アプリケーションを示します。
Flask Web アプリケーションの開発については、以前に著者が書いた Flask の記事を参照してください。
#app.py ファイルを 1 つ作成します:from flask import Flask, render_template, jsonify, request app = Flask(__name__) # 创建一个应用 @app.route('/') def index():# 定义根目录处理器 return render_template('index.html') @app.route('/detail') def detail(): return render_template('detail.html') if __name__ == '__main__': app.run() # 启动服务
import webview from app import app if __name__ == '__main__': window = webview.create_window('Pywebview', app, height=600, width=1000) webview.start()
pip install pyinstaller
pyinstall -F -w main.py
ダブルクリックして実行すると、効果がわかります...
待って、想像したものとは違うようです!
#Flask に接続
何が起こっているのですか?
プロンプトによると、ページのテンプレート ファイルが見つからないためです。
以前に Flask アプリを作成したとき、app.py ファイルが配置されているディレクトリのテンプレート ディレクトリであるデフォルトのテンプレート パスを使用しました。パッケージ化後に見つからないのはなぜですか?
これは、Windows では実行可能ファイルが実行されると特定のディレクトリに解凍され、テンプレート ファイルが exe ファイルにパッケージ化されていないため、実行時にテンプレート ファイルが見つからないためです。
如何解决这个问题呢?
作为不使用外部数据或文件的程序,只需要将程序本身打包就可以了,但大部分程序都需要外部数据,比如我们的 Flask 应用,就需要用到静态文件等。
那么如何将它们打包进可执行文件呢?
只需要在打包时多加一个参数就可以了:
pyinstaller main.py -F -w --add-data "./templates/*;templates"
-- add-data 参数表示添加额外的数据 -- ./templates/* 表示需要添加当前目录的 templates 目录中的所有文件 -- ;为分隔符,其后的 templates 表示解压是这些数据所在的目录,这个目录名必须和 创建 app 时 template_folder 参数一致 -- 如果需要用到静态文件,需要额外添加,比如 --add-data "./static/*;static"
这样就能将外部数据一起打包进来了。
打包好后,双击执行,就会发现网页得以完美呈现了。
如果使用了虚拟环境,必须在虚拟环境中单独安装 pyinstaller,而不能用其他环境中已经安装好的,这是为了包装打包是可以链接所以程序引用的模块
因为 pyinstaller 打包时,找不到被引用的模块时并不报错,而打包好的程序可能会无法执行。
经过一番折腾,终于在客户要求的时间之前将工作完成了,特别高兴。
回头一想,多亏用了 Python 作为主要的开发语言,因为 Python 强悍的社区支持没有找不到的解决方法。
这次经历的另一个启示就是,遇到问题,不要着急就做,可以先想一想,是否有更好的方法,特别在使用 Python 的时候。
比心!
https://www.php.cn/link/0c52d419a421fb13bb58357e67b7fb4b
[1]Electron: https://www.electronjs.org/
[2]Pywebview: https://pywebview.flowrl.com/
[3]虚拟环境: https://mp.weixin.qq.com/s/WflK5pOKhvPg8zrf_W5mfw
[4]pyinstaller: https://pyinstaller.readthedocs.io/en/stable/
以上がPython のヒントでは、Gui を使用しなくてもグラフィカル インターフェイスを実装できますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。