2

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}
     )
4

0 に答える 0