Можно создать пользовательский «модуль запуска», который устанавливает некоторые глобальные переменные и выполняет код в файле python:
from sys import argv
# we read the code of the file passed as the first CLI argument
with open(argv[1]) as fin:
code = fin.read()
# just an example: this will be available in the executed python file
def my_function():
return "World"
global_variables = {
'MY_CONSTANT': "Hello", # prepare a global variable
'my_function': my_function # prepare a global function
}
exec(code, global_variables) # run the file with new global variables
Используйте его следующим образом: python launcher.py my_dsl_file.py
.
Пример my_dsl_file.py
:
# notice: no imports at all
print(MY_CONSTANT)
print(my_function())
Интересно, что Python (не менее CPython) использует другой способ настройки некоторых полезных функций, таких как help
. Он запускает файл с именем site.py
, который добавляет некоторые значения в модуль builtins
.
import builtins
def my_function():
return "World"
builtins.MY_CONSTANT = "Hello"
builtins.my_function = my_function
# run your file like above or simply import it
import <your file>
Я бы не рекомендовал ни один из этих способов. Простой from <your library> import *
- гораздо лучший подход.
Недостатком первых двух вариантов является то, что ни один инструмент не будет ничего знать о ваших введенных глобалах. Например, mypy
, flake8
и все известные мне IDE потерпят неудачу.