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

新手上路,请多包涵

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

 from "models.admin" import *

但是,我收到一个带有双引号的语法错误。但如果我只是这样做

from models.admin import *

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

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

原文由 Alexander Bird 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 451
2 个回答

实际上,您 可以 导入一个名称无效的模块。但是您需要为此使用 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 上的文档。

原文由 Cat Plus Plus 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果你 真的 想要,你可以使用 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 ab”将加载 a/b.py。

原文由 Edward Loper 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题