Как ссылаться на пакет Python, если имя файла содержит точку
-
11-09-2019 - |
Вопрос
Я использую django, у меня есть файл с именем models.admin.py, и я хочу реализовать в models.py следующую идею:
from "models.admin" import *
однако я получаю синтаксическую ошибку из-за двойных кавычек.Но если я просто сделаю
from models.admin import *
тогда я получаю «ImportError:Нет модуля с именем 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»), используя модульimp:
>>> 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.
Файл называется models/admin.py
. (Источник)
То есть его следует назвать admin.py
в каталоге под названием models
.
Затем вы можете импортировать, используя from models.admin import *
, предполагая, что он находится в вашем пути к Python.
Нет, вы не можете импортировать файл Python как модуль, если его имя содержит точку (или вопросительный знак, или восклицательный знак и т. д.).Имя модуля Python (не включая .py) должно быть допустимым именем Python (т. е. может использоваться как имя переменной).
Вы не ссылаетесь файлы в операторе импорта вы ссылаетесь модули и пакеты.
Пожалуйста, прочтите документы, у них очень ясное мнение по этому вопросу.
В любом случае, поскольку вы используете django, обычный подход не сработает.Если вы хотите хранить модели в отдельных файлах, а не в models.py, вам придется предпринять дополнительные шаги, например: здесь.
Редактировать:
Ну, я действительно не знаю, что имеет в виду собеседник, когда упоминает администратора, и связано ли это с интерфейсом администратора django.Мои баллы остаются в силе.