2013-03-05 8 views
12

私は、各学生のための別々のフォルダにあるいくつかのpythonの提出を成績化しようとしています。これを行うには、実行したい関数f()があります。私の現在のパスがファイルの場所と同じ場合、私は単純に行うことができますサブフォルダからのPythonのインポート

import filename 
filename.f() 

しかし、良い方法がありますか?たとえば、のは、次のようなディレクトリ構造があるとしましょう:

main.py 
student/run_this.py 

私は学生のフォルダ内の「__init__.py」ファイルがある場合、私はちょうどしかし

import student.run_this 

を入力することができることを知って、そのファイルがなければ、動作しません。

私が見つけたいくつかの同様の質問が

たが、これらのどれもが、特に満足のいく答えを与えませんでした。

+0

それでは、 '__init __。py'ファイルの問題はどうですか? – eazar001

+1

あなたのパスに 'student'フォルダを追加し、' run_this'をインポートします。それは他の答えがあなたにするように指示したものです。何を試しましたか?それはうまくいきませんでしたか? –

+1

それはエレガントに見えないほどにはうまくいかなかったわけではありません。または少なくとも、\ __ init __。pyを追加することは私にとってはかなり退屈なようです。サブフォルダにアクセスするためにファイル構造を変更するのは不道徳なようです。 パスを変更するには、それは悪い習慣でしたが、合理的な解決策のようです。 – vmkrish

答えて

8

あなたが他のエラーを投稿した場合は、その後

import student.module.py 

とその親フォルダモジュールに学生のフォルダから任意のモジュールを呼び出すことができます

from . import * 

が含まれている必要があり、フォルダstudent内部__init__.pyモジュールを作成しますあなたが直面している、我々はさらに助けることができます。

+1

あなたはなぜ\ __ init __。pyが必要なのかを説明する(または私に資料にリンクする)と思いますか?これで作業は終了しましたが、設計ロジックが – vmkrish

+0

の\ _ \ _ init__.pyは、C++やPythonのクラス継承ロジックと同じくらい簡単です。 Pythonがフォルダを参照するとき、それで利用可能なすべてのモジュールは含まれていません。 Pythonが\ _ \ _ init__関数でクラスに入ったときに実行される関数を指定すると、それはよく理解できます。ここでは、Pythonが\ _ \ _ init__を使ってフォルダを見つけたときに、必要な、またはすべてのモジュールをインポートしています。 –

+0

この回答は私が持っていた問題に答えるために見つけることができる唯一のものです。ありがとう@MathanKumar! –

関連する問題