文件名包含句点时如何引用python包

时间:2009-12-01 18:53:48

标签: python import module package python-import

我正在使用django,我有一个名为models.admin.py的文件,我想在models.py中执行以下想法:

from "models.admin" import *

但是,我有双引号的语法错误。但是,如果我只是做

from models.admin import *

然后我得到“ImportError:没有名为admin的模块”

有没有办法从名称中有句号的python文件中导入?

5 个答案:

答案 0 :(得分:26)

实际上,可以导入名称无效的模块。但是你需要使用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_moduleimp.load_module上的文档。

答案 1 :(得分:12)

如果确实想要,您可以使用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。

答案 2 :(得分:4)

该文件名为models/admin.py。 (Source

也就是说,它应该在名为admin.py的目录中被称为models

然后你可以使用from models.admin import *导入,假设它在你的Python路径中。

答案 3 :(得分:2)

不,如果python文件的名称包含句点(或问号或感叹号等),则无法将其作为模块导入。 python模块的名称(不包括.py)必须是有效的python名称(即可以用作变量名称)。

答案 4 :(得分:-1)

您没有在import语句中引用文件,而是引用 modules packages

请阅读docs,他们对此非常清楚。

无论如何,既然你正在使用django,通常的方法是行不通的。如果您希望将模型保存在单独的文件中,而不是在models.py中,则必须执行额外的步骤,例如,here

编辑:
好吧,当他提到管理员以及它是否与django的管理界面相关时,我真的不知道提问者的意思。我的观点仍然存在。