Pythonはexeにパッケージ化されていますが、大きすぎてどうすればいいですか?
3614 ワード
事の経過
先週、ある同僚が需要を受けて、お客様に小さなツールを書いて、exeファイルにパッケージするように要求しました.これはもちろん難しいことではありません.Pythonを書く以外に、ほとんどの人のパソコンにはPythonコンパイラがないので、exeにパッケージ化し、ユーザー(windows)がダブルクリックして開くことができるので、必須スキルです.
だから編集者はここで皆さんに教えます:Pythonがexeにパッケージ化するのが大きすぎて、私たちはどのように解決しますか?
直接Pyinstallerでcmderを開きます.
(-Fはファイルにパッケージ化されています.-wはデバッグウィンドウが表示されません.自分の小道具にGUIがあるので、デフォルトのデバッグウィンドウは使いません)
長い間待って、やっと梱包が終わって、書類を見ると、ああ、200 M!道理でこんなに長く梱包したわけだ...
インターネットで資料を調べたところ、Anacondaには多くのライブラリが内蔵されており、パッケージ化する際に不要なモジュールをたくさんパッケージ化し、純粋なPythonでパッケージ化しなければならないという人がいました.
少し理屈がありますが、仮想マシンを長く装着したい場合は、空きノートを取り出し、Pythonを再装着してパッケージ化するつもりです.
しかし、ちょうど最近flaskを勉強している間にpipenvを使っていましたが、pipenvの強さはまだ分かりませんが、仮想環境やパッケージを管理するツールであることがわかり、pipenvで新しいpythonコンパイラを作成してpyinstallerを実行してパッケージ化できるかどうか考えていました.
そこで急いでインターネットで調べてみると、pipenv pyinstallerは、役に立つ情報を見つけられなかったので、いっそ自分でやってみました.どうせpipenvの操作は面倒ではありません.
cmderを開く:
梱包完了、大きさを見ると、11 M!成功!
その後、需要を変更して、ソースコードを変更して、ディレクトリを変更してpipenvで再パッケージして、結局パッケージしてから200 Mに戻りました!何度も試してみたが、なかなか過去の20 Mに戻れない!私は前の20 Mが私の幻覚だと疑っています.
でもとにかく先に交差して、200 Mの「小さい」ツールは、ユーザー体験が絶対無理なので、どのモジュールが占める体積が大きいかを排除法で見て、最適化を考えてみました.最初に疑ったのはGUIで、私はほとんどためらうことなくそれだと認定しました.私はPySimpleGUI(強くお勧めします.tkinterに基づいて)を使っています.まずPySimpleGUIの内容を注釈してからパッケージ化します.パッケージ化が終わったらどのくらい大きいと思いますか?
198M!
私が彼のせいにしたようだが、何度も排除した結果、元凶は「fake_useragent
このライブラリはリクエストヘッダを偽装するために使用されています.主にuser-agentをコピーするのがおっくうなので、問題は大きくありません.fake_useragentコメントを外して、自分で手動でuser-agentを1つ貼ればいいです
いいえfake_useragent、exeにパッケージするのは14 Mで、もういいです.
結論
キーは1つです.仮想環境にpyinstallerをインストールするには
仮想環境にpyinstallerをインストールしていない場合は、pyinstallerコマンドも使用できますが、システムの元のpythonコンパイラを呼び出し、関連ライブラリが多く含まれているため、仮想環境でもパッケージされたexeファイルは非常に大きくなります.
もう一つ注意したいのは、pyファイルで呼び出されたライブラリを仮想環境にインストールしないと、パッケージ化しても正常に動作しないことです.
最後に正しい流れを復習します(pipenvをインストールすることを前提とします):
先週、ある同僚が需要を受けて、お客様に小さなツールを書いて、exeファイルにパッケージするように要求しました.これはもちろん難しいことではありません.Pythonを書く以外に、ほとんどの人のパソコンにはPythonコンパイラがないので、exeにパッケージ化し、ユーザー(windows)がダブルクリックして開くことができるので、必須スキルです.
だから編集者はここで皆さんに教えます:Pythonがexeにパッケージ化するのが大きすぎて、私たちはどのように解決しますか?
直接Pyinstallerでcmderを開きます.
pyinstaller -Fw E:\test\url_crawler.py
(-Fはファイルにパッケージ化されています.-wはデバッグウィンドウが表示されません.自分の小道具にGUIがあるので、デフォルトのデバッグウィンドウは使いません)
長い間待って、やっと梱包が終わって、書類を見ると、ああ、200 M!道理でこんなに長く梱包したわけだ...
インターネットで資料を調べたところ、Anacondaには多くのライブラリが内蔵されており、パッケージ化する際に不要なモジュールをたくさんパッケージ化し、純粋なPythonでパッケージ化しなければならないという人がいました.
少し理屈がありますが、仮想マシンを長く装着したい場合は、空きノートを取り出し、Pythonを再装着してパッケージ化するつもりです.
しかし、ちょうど最近flaskを勉強している間にpipenvを使っていましたが、pipenvの強さはまだ分かりませんが、仮想環境やパッケージを管理するツールであることがわかり、pipenvで新しいpythonコンパイラを作成してpyinstallerを実行してパッケージ化できるかどうか考えていました.
そこで急いでインターネットで調べてみると、pipenv pyinstallerは、役に立つ情報を見つけられなかったので、いっそ自分でやってみました.どうせpipenvの操作は面倒ではありません.
cmderを開く:
:851211580 Python +
#
pipenv install
#
pipenv shell
#
pip install .py
#
pip install pyinstaller
#
pyinstaller -Fw E:\test\url_crawler.py
梱包完了、大きさを見ると、11 M!成功!
その後、需要を変更して、ソースコードを変更して、ディレクトリを変更してpipenvで再パッケージして、結局パッケージしてから200 Mに戻りました!何度も試してみたが、なかなか過去の20 Mに戻れない!私は前の20 Mが私の幻覚だと疑っています.
でもとにかく先に交差して、200 Mの「小さい」ツールは、ユーザー体験が絶対無理なので、どのモジュールが占める体積が大きいかを排除法で見て、最適化を考えてみました.最初に疑ったのはGUIで、私はほとんどためらうことなくそれだと認定しました.私はPySimpleGUI(強くお勧めします.tkinterに基づいて)を使っています.まずPySimpleGUIの内容を注釈してからパッケージ化します.パッケージ化が終わったらどのくらい大きいと思いますか?
198M!
私が彼のせいにしたようだが、何度も排除した結果、元凶は「fake_useragent
このライブラリはリクエストヘッダを偽装するために使用されています.主にuser-agentをコピーするのがおっくうなので、問題は大きくありません.fake_useragentコメントを外して、自分で手動でuser-agentを1つ貼ればいいです
#from fake_useragent import UserAgent
#ua = UserAgent()
#headers = {'user-agent':ua.random}
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36'}
いいえfake_useragent、exeにパッケージするのは14 Mで、もういいです.
結論
キーは1つです.仮想環境にpyinstallerをインストールするには
仮想環境にpyinstallerをインストールしていない場合は、pyinstallerコマンドも使用できますが、システムの元のpythonコンパイラを呼び出し、関連ライブラリが多く含まれているため、仮想環境でもパッケージされたexeファイルは非常に大きくなります.
もう一つ注意したいのは、pyファイルで呼び出されたライブラリを仮想環境にインストールしないと、パッケージ化しても正常に動作しないことです.
最後に正しい流れを復習します(pipenvをインストールすることを前提とします):
#
pipenv install
# ( , )
pipenv shell
#
pip install requests pyquery pysimplegui fake_useragent
#
pip install pyinstaller
#
pyinstaller -Fw E:\test\url_crawler.py