我正在使用django,我有一个名为models.admin.py的文件,我想在models.py中执行以下想法:
from "models.admin" import *
但是,我有双引号的语法错误。但是,如果我只是做
from models.admin import *
然后我得到“ImportError:没有名为admin的模块”
有没有办法从名称中有句号的python文件中导入?
答案 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_module
和imp.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)