Импортируйте модуль Python без .py расширения

У меня есть файл, названный foobar (без .py расширения). В том же каталоге у меня есть другой файл Python, который пытается импортировать его:

import foobar

Но это только работает, если я переименовываю файл к foobar.py. Действительно ли возможно импортировать модуль Python, который не имеет .py расширения?

Обновление: файл не имеет никакого расширения, потому что я также использую его в качестве автономного сценария, и я не хочу вводить .py расширение для выполнения его.

Update2: Я пойду для решения для символьной ссылки, упомянутого ниже.

61
задан compie 9 April 2010 в 20:24
поделиться

3 ответа

Вы можете использовать функция imp.load_source (из модуля imp ) для динамической загрузки модуля по заданному пути файловой системы.

foobar = imp.load_source('foobar', '/path/to/foobar')

Это обсуждение SO также показывает некоторые интересные варианты.

41
ответ дан 24 November 2019 в 17:21
поделиться

Как уже упоминалось другими, вы можете использовать imp.load_source, но это затруднит чтение вашего кода. Я бы действительно рекомендовал его только в том случае, если вам нужно импортировать модули, имена или пути которых неизвестны до времени выполнения.

По какой причине вы не хотите использовать расширение .py? Самый распространенный случай нежелания использовать расширение .py - это потому, что скрипт python также запускается как исполняемый файл, но вы все равно хотите, чтобы другие модули могли его импортировать. В этом случае может оказаться полезным переместить функциональные возможности в файл .py с аналогичным именем, а затем использовать foobar в качестве оболочки.

15
ответ дан 24 November 2019 в 17:21
поделиться

imp.load_source (имя_модуля, путь) должен подойти или вы можете сделать более подробный imp.load_module (имя_модуля, дескриптор_файла,. ..) маршрут, если вместо этого у вас есть дескриптор файла

13
ответ дан 24 November 2019 в 17:21
поделиться
Другие вопросы по тегам:

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