Как ссылаться на пакет Python, если имя файла содержит точку

StackOverflow https://stackoverflow.com/questions/1828127

Вопрос

Я использую 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.Мои баллы остаются в силе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top