2011-09-15 14 views
2

Pythonで仮想インポートパスを作成する方法はありますか?Python:仮想インポートパスを作成する

私のディレクトリ構造は、このようなものです:

  • /
    • ネイティブ
      • スクリプト
        • some.py
        • another.py
      • [その他無関係DIRS]

ルートは、プログラムが実行された場所からディレクトリです。 ATM私は、私が代わりにfrom native.scripts import some, anotherimport some, anotherを行うことができます検索パスにnative/scripts/を追加し、私はこのようにそれを行うことができるようにしたい:

from native import some 
import native.another 

は、これを実現する方法はありますか?


関連質問:/native/__init__.py
Making a virtual package available via sys.modules

答えて

2

なぜnative DIRECTOに出some.pyanother.pyを移動しませんなぜなら、ソースコードに後で戻ってくる人々は、物事がなぜ、また、インポートできないのか混乱しないからです。 :)

アップデート:コメントのため

おかげ。彼らは問題を明らかにしました!あなたのケースでは、私は一般的に、私が簡単にそれらに得ることができるnative.someの中に、私がインポートしたいかもしれない関数とクラスを入れます。引数を解釈し、パラメータとしてmain()またはgo()機能にそれらを渡すことによって実行されているすべてのものを開始唯一の薄いシム - - しかし、私は、スクリプトコード、およびのみスクリプトコードを取得し、scriptsディレクトリの中ことを置きます。これにより、外部インターフェイスコードをインポートしたいコードからきれいに分離することができます。つまり、一度に複数のモジュールを持つようにPythonをだます必要はありません。

+0

なぜ、すべてのファイルをルートに入れて、それを使って完了させるのはなぜですか? ;) –

+0

私はPyPIから必要な標準ライブラリとサードパーティのモジュールとの名前の衝突を避けるためにファイルをルートから外しています - 私は、いくつかではなくトップレベルで1つの名前を取り上げるだけです。それが理由です。 :) –

+0

私が書いているのは、Pythonを埋め込んだアプリケーションであり、Pythonで書かれたものではありません。ディレクトリ自体を汚染することなく 'native'パッケージを使ってネイティブスクリプトを参照することができれば、私の具体的な状況ではもっとうまくいくでしょう。 –

3

は、次のとおりです。

from scripts import some, another 
+4

これは 'scripts'自体の中に' __init __。py'がある場合にのみ機能することに注意してください。 (これは明らかでしょうか?)また、これはスクリプトがオンデマンドでインポートされるのではなく、 'native'自体がインポートされたときにインポートされることを意味します。ほとんどの場合、それは問題ではありません。 –

+0

それは一つの解決策ですが、私は 'import native.some'を実行できません。—私もそれをやりたいと思います。 –

+2

@Paulなぜ 'some.py'と' other.py'を 'native /'に移動してみませんか?それはあなたが実際に望んでいるように見えます。 – phihag

関連する問題