11

プラットフォームに依存しない 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", "MyApp", "themes") を使用してデータファイルを見つけると思いますよね?

ただし、開発中にもデータ ファイルにアクセスできるようにしたいと考えています。データ ファイルは、アプリケーション ソースに関連する themes/ ディレクトリにあります。どうすればいいですか?アプリケーションがインストールされているかどうかを確認するスマートな方法はありますか? それとも、現時点では、データ ファイルがどこにあるかに関係なく、データ ファイルにマップするユーティリティですか?

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

4

3 に答える 3

7

あなたが試すことができますpkg_resources

my_data = pkg_resources.resource_string(__name__, fname)
于 2010-04-02T17:35:44.677 に答える
6

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 は必要ありません。

于 2009-08-02T17:58:14.727 に答える
6

pkgutil/pkg_resources モジュールを使用してデータ ファイルをロードする必要があります。圧縮された卵の中からでも機能します。

于 2010-09-13T17:27:02.323 に答える