50

私はdjangoを使用しており、models.admin.pyという名前のファイルがあり、models.pyで次のアイデアを実行したいと考えています:

from "models.admin" import *

ただし、二重引用符があると構文エラーが発生します。しかし、もし私がそうするなら

from models.admin import *

次に、「ImportError:管理者という名前のモジュールがありません」が表示されます

名前にピリオドが含まれる python ファイルからインポートする方法はありますか?

4

6 に答える 6

35

実際には、無効な名前のモジュールをインポートできます。ただし、そのために使用する必要があります。impたとえば、ファイルに名前が付けられていると仮定するとmodels.admin.py、次のことができます。

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

ただし、使用を開始する前に、ドキュメントimp.find_moduleをお読みください。imp.load_module

于 2009-12-01T19:16:50.093 に答える
15

本当に必要な場合は、impモジュールを使用して、通常とは異なるファイル名(たとえば、「。py」の前に「。」を含むファイル名)を持つモジュールをインポートできます。

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

ただし、それは一般的に悪い考えです。パッケージを使用しようとしている可能性が高いです。その場合は、「b.py」という名前のファイルを含む「a」という名前のディレクトリを作成する必要があります。次に、「importab」はa/b.pyをロードします。

于 2009-12-01T19:15:56.300 に答える
4

ファイルの名前はmodels/admin.py. (ソース

つまりadmin.py、 というディレクトリで呼び出す必要がありますmodels

from models.admin import *次に、Python パスにあると仮定して、を使用してインポートできます。

于 2009-12-01T18:58:12.140 に答える
3

いいえ、名前にピリオド (または疑問符、感嘆符など) が含まれている場合、Python ファイルをモジュールとしてインポートすることはできません。Python モジュールの名前 (.py を除く) は、有効な Python 名でなければなりません (つまり、変数名として使用できます)。

于 2009-12-01T19:03:13.457 に答える
-1

import ステートメントでファイルを参照しているのではなく、モジュールパッケージを参照しています。

docsを読んでください。その点については非常に明確です。

とにかく、django を使用しているため、通常の方法ではうまくいきません。モデルを models.py ではなく別のファイルに保持する場合は、追加の手順を実行する必要があります

編集:
まあ、質問者が管理者に言及したときの意味と、それがdjangoの管理インターフェースに関連しているかどうかはよくわかりません。私のポイントはまだ立っています。

于 2009-12-01T19:05:21.220 に答える