質問

プラットフォームに依存しないPyQtアプリケーションを実行しています。 setuptoolsを使用してsetup.pyファイルを作成します。これまでのところ、プラットフォームをデテックすることができました。 Windowsでpy2exeを使用するためにプラットフォームに応じてsetup()の特定のオプションをロードするなど...

ただし、私のアプリケーションでは、いくつかのテーマ、HTML、および画像を配布しています。これらの画像を実行時にアプリケーションに読み込む必要があります。これまでのところ、それらはアプリケーションのthemes /ディレクトリに保存されています。

setuptoolsとdistutilsのドキュメントを読んでおり、setup()にdata_filesオプションを指定した場合、themes /ディレクトリ内のすべてのファイルが" share / MyApp / themes /"にインストールされることがわかりました。 / usr /接頭辞、またはプラットフォーム上のsys.prefixでインストールされます。 os.path.join(sys.prefix、" share&quot ;," MyApp&quot ;," themes")を使用してデータファイルを検索すると仮定します。どのプラットフォームを使用しているのでしょうか?

ただし、開発中のデータファイルにもアクセスできるようにしたいので、データソースはアプリケーションソースに対してthemes /ディレクトリにあります。どうすればいいですか? アプリケーションがインストールされているかどうかを判断するスマートな方法はありますか?または、現在どこにいてもデータファイルにマップするユーティリティですか?

ソースに関連するテーマがあるか、sys.prefix / share ...などにあるかどうかを確認するために、あらゆる種類のいハックを追加するのは本当に嫌いです。開発中にデータファイルを見つける方法を教えてください。そして、任意のプラットフォームにインストールした後ですか?

役に立ちましたか?

解決

data_fileというユーティリティメソッドを使用しました:

def data_file(fname):
    """Return the path to a data file of ours."""
    return os.path.join(os.path.split(__file__)[0], fname)

これをプロジェクトの init .pyファイルに入れ、パッケージ内のどこからでも呼び出して、パッケージに関連するファイルを取得します。

Setuptoolsは同様の機能を提供しますが、これにはsetuptoolsは必要ありません。

他のヒント

pkg_resources

my_data = pkg_resources.resource_string(__name__, fname)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top