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

В Java статический интерфейс/класс позволяет интерфейсу/классу использоваться как класс верхнего уровня, то есть, это может быть объявлено другими классами. Так, можно сделать:

class Bob
{
  void FuncA ()
  {
    Foo.Bar foobar;
  }
}

Без помех, вышеупомянутому не удалось бы скомпилировать. Преимущество для этого состоит в том, что Вам не нужен новый исходный файл только для объявления интерфейса. Это также визуально связывает интерфейс Bar к классу Foo, так как необходимо записать Foo. Панель и подразумевает, что класс Foo делает что-то с экземплярами Foo. Панель.

описание А типов классов в Java.

37
задан Ctrl S 13 July 2018 в 20:45
поделиться

5 ответов

Фактически, вы можете импортировать модуль с недопустимым именем. Но для этого вам нужно использовать 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 , прежде чем вы начнете его использовать.

27
ответ дан 27 November 2019 в 04:57
поделиться

Файл называется models / admin.py . ( Источник )

То есть он должен называться admin.py в каталоге под названием models .

Затем вы можете импортировать, используя ] из models.admin import * , предполагая, что он находится в вашем пути Python.

4
ответ дан 27 November 2019 в 04:57
поделиться

Если вы действительно хотите, вы можете импортировать модуль с необычным именем файла (например, имя файла, содержащее '.' Перед '.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 ab" загрузит файл / b.py.

12
ответ дан 27 November 2019 в 04:57
поделиться

Нет, вы не можете импортировать файл python как модуль, если его имя содержит точку (или вопросительный знак, или восклицательный знак и т. Д.). Имя модуля python (не включая .py) должно быть действительным именем python (т.е. может использоваться как имя переменной).

2
ответ дан 27 November 2019 в 04:57
поделиться

Вы не ссылаетесь на файлы в операторе импорта, вы ссылаетесь на модули и пакеты .

Прочтите ] docs , они очень ясны по этому поводу.

В любом случае, поскольку вы используете django, обычный подход не сработает. Ну, я действительно не знаю, что имеет в виду спрашивающий, когда он упоминает администратора, и связано ли это с интерфейсом администратора django. Мои доводы остаются в силе.

-1
ответ дан 27 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: