1

大規模なプロジェクト用にモジュールの階層をうまく構築したいと考えています.. (Python がこれを邪魔しているようです) モジュールとパッケージの区別と、それらが C++ の名前空間の概念とどのように関係しているかについて混乱しています。具体的に言うと、私のプロジェクトはコンパイラであり、コード生成フェーズでは、別のディレクトリ (実際には階層内で遠く離れた場所) に保持されている抽象表現のセットからプロパティをクエリしたいと考えています。

問題は次のように言えます。

お尻: a.py と b.py をプロジェクト階層のどこかにある 2 つのソース ファイルとします。

次に: a.py から b.py で定義された関数を参照したい - 理想的には、プロジェクトの適切に定義されたルート ディレクトリ (/src) からの相対パスを使用します。これには、常に機能する汎用的なソリューションが必要です..

汚いハック: ばかげているように聞こえますが、このプロジェクトの .py を含むすべてのサブディレクトリを PYTHONPATH に配置すると、それらの名前でそれらを参照できますが、これにより、コードの読者は階層と関係の感覚を失いますさまざまなプロジェクト クラスなど

注: Python.org のチュートリアルでは、ファイル c.py からその親ディレクトリに配置されたファイル d.py を参照する特殊なケースについてのみ言及しています。ここで、Python を非常に大規模なプロジェクトにスケーリングする一般性はどこにありますか?

4

1 に答える 1

1

それが質問かどうかはわかりませんが、見てみましょう。

次のパッケージスキームがあるとします(__init__.py読みやすくするためにファイルは除外されています):

foo/baz/quux/b.py
foo/baz/quux/quuuux/c.py
foo/bar/a.py

私のfoo/baz/quux/b.pyファイルにはこれが含まれています:

def func_b():
    print 'func b'

そして私foo/baz/quux/quuuux/c.pyは:

def func_c():
    print 'func c'

foo(あなたの場合はsrc*)を含むルート ディレクトリがPython パスにある場合、aurfoo/bar/a.pyファイルは から始まる他のモジュールをインポートできますfoo

import foo.baz.quux.b as b
import foo.baz.quux.quuuux.c as c

def func_a():
    b.func_b()
    c.func_c()

そして、次のfoo/bar/a.pyように使用できます。

import foo.bar.a as a

a.func_a()

試してみましたか?何かエラーが出ましたか?

* プロジェクトを展開するとき、ルートはそうなるとは思いませんがsrc、省略してシンプルに保ちましょう :)

于 2012-06-21T19:09:38.357 に答える