50

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

from "models.admin" import *

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

from models.admin import *

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

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

4

6 回答 6

35

实际上,您可以导入具有无效名称的模块。但是你需要使用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使用它之前请阅读文档。

于 2009-12-01T19:16:50.093 回答
15

如果你真的想要,你可以使用 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。

于 2009-12-01T19:15:56.300 回答
4

该文件称为models/admin.py. (来源

也就是说,它应该admin.py在一个名为models.

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

于 2009-12-01T18:58:12.140 回答
3

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

于 2009-12-01T19:03:13.457 回答
3

像下面

假设 dir 结构是这样的:

C:.
│   script.py
│   
└───Parent
    └───Child
        ├───1.1
        │       main.py
        │       
        └───1.2

**假设您要在 script.py 中导入 main.py **

您的 main.py 如下所示

def my_function():
  print("Hello from a function")

您的 script.py 如下所示

from os import path
import importlib
from os.path import dirname
import sys
import importlib.util


def getPath():
    # your logic to get to the path
    return path.join(dirname(__file__),'Parent','Child','1.1','main.py')

file_path = getPath() 
module_name = 'main'

spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

#call functions like this
module.my_function()

看看这个要点

于 2021-11-20T06:29:05.287 回答
-1

您不是在 import 语句中引用文件,而是在引用modulespackages

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

无论如何,由于您使用的是 django,因此通常的方法是行不通的。如果您想将模型保存在单独的文件中,而不是保存在 models.py 中,则必须采取额外的步骤,例如,此处概述。

编辑:
嗯,我真的不知道提问者提到 admin 是什么意思,以及它是否与 django 的管理界面有关。我的观点仍然成立。

于 2009-12-01T19:05:21.220 回答