"setting.py" ですべての installed_apps の絶対パスを取得したい。
app_list = [ app for app in Myproject.settings.INSTALLED_APPS ]
アプリケーションのリストを表示しますが、それらすべての絶対パスを取得する方法を教えてください。
ありがとうございました。
今日、私は自分の問題を解決しました。私はこのコードを書き、それはちょうど働いています。限定名クラスの場合、「models.Model」に固有のクラスの名前を見つけます。それを変更して楽しむことができます。また、このコードはモジュールの深さ 1 でファイルを検索します。それは変わることができます。
app_list = [app for app in training.settings.INSTALLED_APPS if "task" in app]
for module in app_list:
module1 = __import__(module)
temp = module1.__path__
files_path = [temp[0] + os.sep + files_name for files_name in os.listdir(temp[0]) if
os.path.splitext(files_name)[1] == ".py"]
p = re.compile(r'class\s*\w*\s*\(models.Model\):')
for file in files_path:
infile = open(file)
text = infile.read()
all_class = p.findall(text)
print [class_name[6:][:-15] for class_name in all_class]
あなたが望むことをすることは本当に不可能です。つまり、ほとんどそこに到達できるということですが、これには実際の機能はありません。特に、Python はクラス、メソッド、および変数を区別しません。それらはすべてモジュールの属性としてカウントされます。
まず、INSTALLED_APPS
文字列のタプルです。したがって、有用な情報を取得するために、それらをモジュールとしてロードする必要があります。
for app in settings.INSTALLED_APPS:
module = __import__(app)
次に、実際のモジュールdir
を取得したら、それを呼び出してその属性のリストを取得できます。
for app in settings.INSTALLED_APPS:
module = __import__(app)
print dir(module)
そして、それはあなたができる限りのことです。クラスだけでなく、モジュールに設定されているすべてを出力します。ここから、クラス以外のすべてを取り除くために私が考えることができる唯一の手段は、命名規則に従っていると仮定して、大文字で始まる項目を探すことです。それは正確には科学的ではありませんが、それだけです。