0

wxPython フレームワークを使用して、かなり複雑なデスクトップ アプリケーションを開発しています。この時点で、app には既に多数のモジュール (ライブラリ、UI モジュール、ユーティリティ モジュール) が含まれています。

プロジェクトは次のようになります。

MyApp/
    __init__.py -- empty
    main.py
    util/
        __init__.py -- empty
    lib1/
        __init__.py
    lib2/
        __init__.py
    gui/
        __init__.py -- empty
        window1.py

残念ながら、現在のプロジェクト構造では、次のpython MyApp/main.pyようなエラーで失敗するため、絶対インポートを使用できませんImportError: No module named MyApp.gui

これを克服するために、MyApp を実行可能パッケージにしたいと思います。

my_app/
    __init__.py -- empty
    __main__.py
    util/
        __init__.py -- empty
    lib1/
        __init__.py
    lib2/
        __init__.py
    gui/
        __init__.py -- empty
        window1.py

を使用してアプリケーションを開始できるようになりましたpython -m my_app

これまでのところ、すべて問題ないように見えますが、誰もそのようなアプローチを使用していないため、私は疑問に思っています。wxPython に付属のデモを見ると、ほとんどフラットなプロジェクトであることがわかります。

私は間違いなく最も賢い人ではないので、なぜ誰もそのようなアプローチを使用しないのか、単純で明白なものが欠けています。

たぶん、サブフォルダーまたはフラットなプロジェクト構造に固執する必要がありますか? たぶん、絶対インポートはそのような変更に値しませんか?

4

3 に答える 3

2

そのほとんどをパッケージの名前空間に配置するのが最善の方法です。バイトコード キャッシュを利用することもでき、setuptools/Distribute で簡単にインストールできるからです。次に、メイン モジュールをロードして実行するための単純なトップレベル スクリプトを提供するだけです。

何かのようなもの:

#!/usr/bin/python

import sys
from MyApp import main

main.main(sys.argv)

のような名前を付けてmyapp、/usr/local/bin (または PATH のどこかに) にインストールするだけです。メイン モジュールをインポートしてメイン関数 (またはクラス) を実行するだけです。

于 2012-12-03T21:46:02.083 に答える
2

もし私があなたなら、世の中に出回っている wxPython アプリケーションのいくつかを見て、それらがどのように機能するかを確認します。

または、wxPython デモ パッケージですら。

于 2012-12-03T20:03:01.577 に答える
1

単一のパッケージに収めることが良いことである理由を理解しているようです。したがって、これについて簡単に説明します。

  1. プロジェクトをよりよく整理できます。異なることを担当する複数のモジュールがある場合、他のライブラリとの競合を恐れることはありません。したがって、基本的には単純な名前空間として機能します。
  2. easy_install などを介して更新することでメリットが得られます。しかし、それが本当に大きなプラスかどうかはわかりません。
  3. プラグインを自発的に許可するか、ユーザー側で微調整するための場所を残すかにかかわらず、プラグインを使用して拡張する方が簡単です。

このアプローチを使用する例をいくつか紹介します。主にプラグインのアプローチだと思います。

  • Exaile : 音楽プレーヤー。この構造を介してプラグインを追加できます。また、GUI が別のパッケージに含まれていることにも注意してください。理由はわかりませんが、UI の分離 (GTK ですが、問題ではありません) が明確になります。
  • ここで宣伝します :) wxpos : これは私のプロジェクトの 1 つです。例として wxPython を使用した私のアプローチを見てみたい場合。

私が思いつく以上のものがあり、どこかで見たことがあるはずです。

于 2012-12-03T21:50:36.603 に答える