ホームページ  >  記事  >  バックエンド開発  >  Pythonを使ってバッチパッケージングプログラムを実装するためのツール~

Pythonを使ってバッチパッケージングプログラムを実装するためのツール~

王林
王林転載
2023-04-18 21:22:012111ブラウズ

Pythonを使ってバッチパッケージングプログラムを実装するためのツール~

最近、大御所が投稿したビジュアル パッケージング ツール auto-py-to-exe に関する記事を読みました。Auto-py-to-exe は pyinstaller をベースにしていますが、 pyinstaller には GUI インターフェイスがあります。私も実際に試してみましたが、数クリックでプログラムをパッケージ化できるのでとても便利です。

しかし、auto-py-to-exe も pyinstaller も、一度に複数のプログラムを直接パッケージ化できないことがわかりました。複数のプログラムをパッケージ化したい場合は、再度パッケージ化する必要があるため、プログラマにとっては、これが必要です耐えられない事。これに基づいて、pyinstaller に基づいた小さなバッチ パッケージング プログラムを作成しました。

プログラムは cmd コマンドを呼び出します

pyinstaller パッケージ化プログラムは cmd コマンドを使用する必要があります。ここでは、cmd コマンドを呼び出す一般的な方法を簡単に紹介します。

os.system()

system() は、os モジュールに組み込まれた関数で、文字列をコマンドに変換し、端末上で実行できます。この方法は非常に簡単で、実行するコマンドを文字列の形式で関数に入力するだけです:

def system(*args, **kwargs): # real signature unknown
 """ Execute the command in a subshell. """
 pass

コマンドの実行時に cmd ウィンドウは表示されません。デフォルトでは IDE に表示されます。生成されたファイルはデフォルトで同じディレクトリにあります:

Pythonを使ってバッチパッケージングプログラムを実装するためのツール~ os.popen()

popen() メソッドも組み込み関数ですos モジュールの. パイプラインを通じて実装されます. 戻り値はファイル オブジェクトです. の読み取りと書き込みが可能です。デフォルトは「r」読みです。出力内容は、オブジェクトの read() または readlines() メソッドを呼び出すことで読み取ることができます。ソース コードは次のとおりです:

import os
os.system(f'pyinstaller -F -w D:程序.py')

使用方法は、必要なパラメータを渡し、読み取りまたは書き込みによって実行するだけです。 :

def popen(cmd, mode="r", buffering=-1):
 if not isinstance(cmd, str):
 raise TypeError("invalid cmd type (%s, expected string)" % type(cmd))
 if mode not in ("r", "w"):
 raise ValueError("invalid mode %r" % mode)
 if buffering == 0 or buffering is None:
 raise ValueError("popen() does not support unbuffered streams")
 import subprocess, io
 if mode == "r":
 proc = subprocess.Popen(cmd,
 shell=True,
 stdout=subprocess.PIPE,
 bufsize=buffering)
 return _wrap_close(io.TextIOWrapper(proc.stdout), proc)
 else:
 proc = subprocess.Popen(cmd,
 shell=True,
 stdin=subprocess.PIPE,
 bufsize=buffering)
 return _wrap_close(io.TextIOWrapper(proc.stdin), proc)

実行結果はos.system()と同じで、生成されたファイルは同じディレクトリにあります。

subprocess.run()

subprocess モジュールは、いくつかの古いモジュール メソッドを置き換えるために正式に使用されます。これには多くのコンテンツ メソッドが含まれており、os.system() や os.popen() よりも高度です). いくつかを改善します。 subprocess モジュールには cmd コマンドを呼び出すための複数のメソッド (Popen、call、run、getstatusoutput) がありますが、ここでは run() メソッドについて簡単に説明します。

subprocess.run() 関数は、指定されたコマンドを実行し、コマンドが実行されるのを待ち、実行結果を含む CompletedProcess クラスのインスタンスを返します。

使用方法は、文字列コマンドを渡す os.system() および os.popen() メソッドと同じですが、パラメータの選択は os.system() および os の場合よりもはるかに多くなります。 .popen():

os.popen(f'pyinstaller -F -w D:程序.py').read()

このメソッドはデフォルトでは出力を返さず、コマンドと実行ステータスのみを返します。

プログラムの実装

複数のプログラムが cmd コマンドを呼び出す方法はすでにわかっています。この記事では os.system() メソッドを使用します。使用方法は非常に単純です。要件がより複雑な場合は、徹底的なリサーチを行うことができます。

GUI の構築に使用されるライブラリは PySimpleGUI です:

subprocess.run(f'pyinstaller -F -w D:程序.py')

まだインストールされていない場合は、pip コマンドを使用してインストールできます:

import os
import PySimpleGUI as sg

GUI インターフェイスdesign

であるため 関数に特別な要件はありません。1 回の操作で複数のプログラムをパッケージ化できれば十分です。最終的な設計コードは次のとおりです。

pip intsall 库名

The

Pythonを使ってバッチパッケージングプログラムを実装するためのツール~ウィジェット インターフェース

論理設計

インターフェースを通じて取得したファイル パスは ";" で区切られます。これは後で分割する必要があります:

# 主题设置
sg.theme('LightBrown3')
# 布局设置
layout = [
 [sg.Frame(layout=[
 [
 sg.InputText(key='please_select_file', size=(24, 1), font=("微软雅黑", 10), enable_events=True),
 # FileBrowse 只能选择单个文件 FilesBrowse加入s可以选择多个文件
 sg.FilesBrowse('获取文件', file_types=(("Text Files", "*.py"),), font=("微软雅黑", 10)),
 ],
 ],
 title='选择文件', title_color='blue', font=("微软雅黑", 10), relief=sg.RELIEF_SUNKEN, )],
 [sg.Button('开始打包', font=("微软雅黑", 10)),
sg.Text('', font=("微软雅黑", 10), size=(16, 0)), sg.Button('退出程序', font=("微软雅黑", 10), button_color='red')]# button_color blue red
]
# 创建窗口
window = sg.Window('打包工具', layout, font=("微软雅黑", 12), default_element_size=(30, 1))

パッケージ化関数

関数はリストを受け取り、ループを通じて読み取る必要があります。split で分割されたパスはリストを生成しますが、これにはまだ必要がありますループを通じて読み取られます。プログラムのパッケージング効果は比較的単純で、それぞれ -F と -w 単一の実行可能ファイルを生成し、コマンド ライン ウィンドウの表示をキャンセルするには:

valuelist = []
# 事件循环
while True:
 # 退出按钮
 event, values = window.read()
 if event in (None, '退出程序'):
 break
 # 打开文件按钮
 if event == 'please_select_file':
 fileName = values['please_select_file']
 # 得到的文件路径是以 “;”相分隔的,传入列表
 valuelist.append(fileName)
 if event == '开始打包':
 if len(valuelist) != 0:
# 传入打包函数
 pyinstaller_(valuelist)
 else:
 sg.popup('文件未选择!')

最終的に生成された .exe 実行可能ファイルファイルは dist ファイルに保存されます:

Pythonを使ってバッチパッケージングプログラムを実装するためのツール~Result.exe ファイル

ガジェットの長所と短所:

長所: ガジェットの効果は、他のニーズがある人にとってはあまり役に立ちませんが、より多くの荷物を詰める必要がある人にとっては役に立ちますが、このプログラムを使用する人にとっては、それでも役に立ちます。
  • 欠点: このガジェットの欠点は明らかで、パッケージ化されたプログラムのアイコンなどを操作できず、コマンドを実行する際も 1 つずつしか実行できないため、効率が大幅に低下し、ガジェットの調整が必要になります。スレッドとプロセス。
  • これまでのところ、Python を使用してプログラムのバッチ パッケージ化の必要性を解決し、手を解放することに成功しました。

以上がPythonを使ってバッチパッケージングプログラムを実装するためのツール~の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。