当文件名包含句点时如何引用python包
-
11-09-2019 - |
题
我正在使用 django 并且有一个名为 models.admin.py 的文件,我想在 models.py 中执行以下操作:
from "models.admin" import *
但是,我因使用双引号而出现语法错误。但如果我这样做
from models.admin import *
然后我得到“导入错误:没有名为 admin 的模块”
有什么方法可以从名称中包含句点的 python 文件导入吗?
解决方案
其实,你 能 导入名称无效的模块。但你需要使用 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
在你开始使用它之前。
其他提示
如果您的真正的想,你可以导入一个模块,一个不寻常的文件名(例如,前“的.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”的文件;然后 “进口A·B” 将加载一个/ b.py。
该文件称为models/admin.py
。 (源 )
也就是说,它应该被称为在一个目录中称为admin.py
models
。
然后就可以导入使用from models.admin import *
,假设它是在你的Python路径。
不,你不能,如果其名称包含句号(或问号或感叹号等)导入一个python文件作为一个模块。一个Python模块的名称(不包括的.py)必须是一个有效的Python名称(即可以被用作变量名称)。
不隶属于 StackOverflow