0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python アプリをパッケージングしてあとで python コードを差し替えたいメモ

Last updated at Posted at 2022-04-08

背景

numpy とか torch とか入ったアプリを単体で配布したい.

pyinstaller で .exe とパッケージ作れるが, バグとか修正とかあって一部差し替えしたいが作り直しになってつらい.
(.exe だとアンチウイルスチェックかかったりして毎度配布がめんどい)

py だけ差し替えしたい

とりあえずの方法

exec でがんばります.

# mymodule.py
def bora():
    print("hello")
# main.py
def main():

    import mymodule
    exec(open("custommod.py").read())

main()
# custommod.py
def myfunc():
    import mymodule
    mymodule.bora()


myfunc()

main.py とかに自前アプリのカスタム module がある場合は import しておきましょう.
そうしないと pyinstaller がパッケージングしてくれず, custommod 内での自作 module インポートに失敗します.

これで main.py を .exe にしておき, あとで custommod.py だけ差し替えてもらうでいけます!
(自作 module とかに変更なければ)

全体を差し替え可能にする.

使う modules が変わらない場合,

# myapp.py

...

def main():
   ...
# bootstrap.py

import myapp

exec(open("myapp.py").read())

myapp.main()

として, bootstrap.py.exe 化するといけるのがわかりました!

ただ, 一部うまく import が含まれないときがあります.
私の場合は tkinter, PIL 使っていて PIL._tkinter_finder が含まれませんでした.

spec ファイルなり -hiddenimports オプションで適宜指定してあげましょう!

hiddenimports=['PIL._tkinter_finder'],

TODO

  • pyinstaller に module 関係だけパッケージしてメインは python.exe で動かす方法あったりするかしら
  • conda とかで環境一式を特定のフォルダにつくってそれで完結させるのとかできないかしら
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?