web-dev-qa-db-ja.com

参照方法pythonファイル名にピリオドが含まれている場合のパッケージ

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

from "models.admin" import *

ただし、二重引用符があると構文エラーになります。しかし、私がするだけなら

from models.admin import *

その後、「ImportError:adminという名前のモジュールはありません」が表示されます

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

39
Alexander Bird

実際には、無効な名前のモジュールをインポートできます。ただし、そのためには 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 使用する前に。

30
Cat Plus Plus

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

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

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

12
Edward Loper

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

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

次に、from models.admin import *を使用してインポートできます。これは、Pythonパスにあることを前提としています。

5
Mark Byers

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

2
Gabriel Reid