« 最強になるのか | トップページ | 綺麗な空 »

2023年6月 2日 (金)

コマンドプロンプトを表示したくない

ずーっと雨。

雲が切れるか?と思って見ていても、雲が繋がっている状態で動いていて、なかなか雲が切れなかった。

台風の影響が直接あったということではなく、台風によって刺激された前線の影響で雨が降ったっていう感じだね。

 

Python初心者が、Bing Search(Bing AIチャット)やPerplexity AIを使って、あっという間に、それなりのプログラムが出来てしまうという体験をすると、AIの補助って、ものすごく有り難いと思う。

VB.NETで、ものすごい時間と労力をかけて作ったものが、ベース部分とは言え、ほんのちょっとの時間で完成してしまったのである。

出てきたコードそのまま使えない時の方が多いけれど、ちょっと手直しすれば使える状態になる。

もし、同じコードを、以前のように、ネット検索だけで作ろうと思ったら、結構な時間が掛かったと思う。

 

Pythonのプログラムを実行する上において、どうにかならんのか?と思ったのが、コマンドプロンプトが表示されること。

例えば、「python フルパス\test.py」を、ショートカットキーで登録し、実行すると、背後にコマンドプロンプトが表示される。

このコマンドプロンプトを表示したくない!

なんとかならんのか、ということで、AIに尋ねると、やはりあるんだね。

そりゃそうか。(苦笑)

 

大きく、2つやり方があるようだ。

まずは、「pythonw test.pyw」というやり方。

こうすると、コマンドプロンプトが表示されず、そのプログラムだけが表示される。

一般的に、ソースの方は、「test.py」という感じで、拡張子は「py」だけなんだけれど、それを「pyw」にして、「python.exe」ではなく、「pythonw.exe」で実行してあげる。

ちなみに、「pythonw test.py」もいけたのだけれど、何か違いがあるのだろうか?と思って、Perplexity AIに聞いてみた。

Pythonスクリプトを実行する場合、拡張子が.pyの場合と.pywの場合の違いは、Pythonインタプリタがどのように起動されるかです。

.pyファイルをダブルクリックして開くと、Pythonインタプリタがコマンドラインで起動されます。一方、.pywファイルをダブルクリックして開くと、Pythonインタプリタがウィンドウモードで起動されます。つまり、コマンドラインウィンドウが表示されずにスクリプトが実行されます。
したがって、.pyファイルでも.pywファイルでも問題ありません。ただし、GUIアプリケーションを作成する場合は、通常は.pywファイルを使用します。これは、GUIアプリケーションではコマンドラインウィンドウが不要であるためです。
また、「pythonw」コマンドを使用してPythonスクリプトを実行することもできます。この場合、拡張子に関係なくPythonインタプリタがウィンドウモードで起動されます。

GUIを作っている時でも、print文で、実行結果を表示したい時もあると思うので、両方あるといい。

そこで、「py」と「pyw」の両方を使い分けるなら、シンボリックリンク(mklinkコマンド)で、どちらかを作るといいだろう。

 

もう1つの方法は、コンパイルすること。

Pythonは、インタープリタ言語。

これって、ある意味、不自由だよなぁ、コンパイルって出来ないの?と思ったら、これまた出来るらしい。

素人が考えることは既に解決済みなんだね。(笑)

コンパイルするメリットとしては、配布する場合、ソースを非公開に出来ること。
バイナリ形式になっているので、中を見ることが出来ない。

やり方は、2通りあって、

「python -m py_compile test.py」

「python -m compileall test.py」

どう違うのか、これまた、Perplexity AIに聞いてみた。

「python -m py_compile test.py」と「python -m compileall test.py」は、異なる目的で使用されます。

「python -m py_compile test.py」は、test.pyファイルをコンパイルしてtest.pycファイルを生成するために使用されます。これにより、Pythonスクリプトの実行速度が向上し、コードの保護も強化されます。
一方、「python -m compileall test.py」は、指定されたディレクトリ内のすべてのPythonスクリプトを再帰的にコンパイルして.pycファイルを生成するために使用されます。これにより、Pythonスクリプト全体の実行速度が向上し、複数のスクリプトを含む大規模なプロジェクトでも効率的に動作します。
したがって、「python -m py_compile test.py」は個々のPythonスクリプトをコンパイルする場合に使用し、「python -m compileall test.py」は大規模なPythonプロジェクトで複数のスクリプトを一括でコンパイルする場合に使用します。

なるほど、一般的な用途、コードが複数ファイルない場合は、前者で十分だっていうことか。

コンパイルすると、直下に、「__pycache__」フォルダが出来、その中に、「test.cpython-310.pyc」というファイルが出来る。
数字は、Pythonのバージョン番号。

「pythonw __pycache__\test.cpython-310.pyc」で、実行出来る。

これも、シンボリックリンクを張って、適当な場所に置いておけば、実行しやすくなる。

 

もう1つ、EXE形式に出来るやり方があるんだけれど、これはちょっとな、と思った。

ライブラリ全てが、EXE形式になるか、関連するライブラリがフォルダの中に全て入っていて、それらも含めて配布する必要性がある、というものなので。

配布先に、Pythonがインストールされていなければ、こうするしかないけれど、Pythonがインストールされているなら、このコンパイル式の方がいいようだ。

 

最後に、些細な工夫。

コマンドプロンプト画面で、いつも、「python test.py」なんて打っていた。

矢印キー↑をすれば、以前のコマンドが表示されるから、あまり気にしないかもしれないけれど、それでも、打つ時はあると思うので、こういう工夫。

バッチファイルを作るのである。

例えば、「p.bat」というファイル名にし、中は、「python -m %1」とするのである。

「-m」とすれば、拡張子「.py」は省略していいらしい。

こういうバッチファイルを作っておけば、「python test.py」や「python -m test」が「p test」で終わるので、打つのが楽になる。

「pythonw.exe」で実行する時は、「pw.bat」ファイルの中を「start "" pythonw %1.pyw」にしておき、「pw test」と打てば、裏で起動し、かつ、コマンドプロンプトも表示されない。

ちょっとしたことだけれど、少しでも労力を少なくする工夫であった。

|

« 最強になるのか | トップページ | 綺麗な空 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 最強になるのか | トップページ | 綺麗な空 »