2

次のようなファイル構造があります。

project/
    __init__.py
    common/
        __init__.py
        util.py
        utilhelper.py
    stuff/
        __init__.py
        coolstuff/
            __init__.py
            awesome.py

共通/初期化.py

import util, utilhelper

共通/util.py

import utilhelper
help = utilhelper.help()

スタッフ/クールスタッフ/awesome.py

from common import util
print util.help

私がする時:

python プロジェクト/もの/coolstuff/awesome.py

「from common import util」は「common という名前のモジュールがありません」で失敗します。

これを解決する方法がわからないため、パスやパッケージングなどの非常に重要な精神的概念が欠けていることに気付きました。しかし、可能であれば、「from common import util」のようなコードを深いサブディレクトリに保持したいと考えています。

私は考えました:

@task
@needs(['common'])
def dostuff():
    sh('python stuff/coolstuff/awesome.py')

残念ながら、私は自分が何をしているのかわからず、これに関する良い例/チュートリアルを見つけることができません.

- Imp を使用して、スクリプトの 100% で相対および/または絶対ファイル パスを明示的にインポートする

-すべてのpythonファイルの先頭に小さなハックパス挿入を書く

アドバイスをいただければ幸いです。

4

1 に答える 1

0

簡単な修正として、私は:

  • 共通ディレクトリを stuff/ 内に移動しました
  • 「from ..common import util」で、awesome.py で相対インポートを使用しました。
  • taskrunner ファイルで sh を使用して、-m (モジュールモード) python スクリプトランチャーを明示的にハードコーディングしました
于 2013-10-04T20:20:18.057 に答える