GUI を備えたスクリプトを含む単純なライブラリ/アプリケーションを配布しています。Windowsでは、これをpythonw.exeで、できれば.pyw
ファイルにして実行したい。
root/
lib/
lib.py
guiscript.py
setup.py
ユーザーがguiscript
任意のパスにインストールできるようにしたい。
この質問からこのフックを盗みました:
from distutils.core import setup
from distutils.command.install import install
import os, sys
class my_install(install):
def run(self):
install.run(self)
try:
if (sys.platform == "win32") and sys.argv[1] != "-remove":
os.rename("guiscript.py",
"guiscript.pyw")
except IndexError:pass
setup(...
cmdclass={"install": my_install})
ただし、パスが setup.py からの相対パスであるため、ソース フォルダー内の guiscript.py の名前が変更されるため、これは機能しません。
スクリプトのインストールパスを取得する合理的な方法、または代わりに guiscript.py を見つける簡単な方法はありますか (PYTHONPATH にあるとは限りません)。
カルマが 50 ないので、7 時間以内に自分の投稿に回答することはできませんが、次のとおりです。
さて、私は解決策を見つけました。ご要望があれば、質問を削除することもできます。
from distutils.core import setup
from distutils.command.install_scripts import install_scripts
import os, sys
class my_install(install_scripts):
"""Change main script to .pyw after installation.
If sys.argv == '-remove'; it's ran as uninstall-script.
Override run() and then call parent."""
def run(self):
install_scripts.run(self)
try:
if (sys.platform == "win32") and sys.argv[1] != "-remove":
for script in self.get_outputs():
if script.endswith("guiscript.py"):
os.rename(script, script+"w")
except IndexError:pass
setup(...
cmdclass={"install_scripts": my_install}
)