pyinstallerパッケージ後のプログラムのボリュームが大きすぎる問題の解決
3413 ワード
先週、需要を受けて、お客様に小さなツールを書いて、exeファイルにパッケージするように要求しました.これはもちろん難しいことではありません.Pythonを書く以外に、ほとんどの人のパソコンにはPythonコンパイラがないので、exeにパッケージ化し、ユーザー(windows)がダブルクリックして開くことができるので、必須スキルです.直接Pyinstallerでcmder:pyinstaller-Fw E:testurl_を開きますcrawler.py(-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をインストールすることを前提とします):仮想環境を構築します
#
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