Мне интересно, если Python предлагает нечто похожее на ключевое слово пакета в Perl. Это ключевое слово в действительности создает помеченное пространство имен в любом месте кода.
Насколько я знаю, подобное пространство имен в Python возможно только путем помещения этого кода в файл и его импорта. Но что, если у меня есть код в переменной (например, прочитайте из некоторого файла конфигурации моего скрипта)?
Итак, другими словами: есть ли способ оценить код Python в произвольном пространстве имен? В Perl я бы просто добавил
package my_pack;
в начале этого кода, а затем eval его (в пространстве имен, называемом my_pack)
Спасибо за любую помощь.
Нет, системы модулей Perl и Python работают по-разному. Невозможно явно объявить конкретный модуль Python.
Для Python eval()
или exec()
которые должны выполнять код в контексте конкретного модуля, рассмотрите, какие аспекты определяют этот модуль для ваших целей - важный аспект, вероятно, является глобальными переменными модуля. Вы можете предоставить их явно и захватить текущую среду с помощью функции globals()
. Окружающая среда - это просто диктовка, которую вы можете скопировать, если хотите избежать модификаций среды модуля.