сделать функцию доступной без импорта по всему миру - PullRequest
0 голосов
/ 02 апреля 2020

скажем, я хотел создать базовую библиотеку для проекта с такими функциями, как:

def foo(x):
    """common, useful function"""

, и я хочу сделать эти функции глобально доступными в моем проекте, чтобы при вызове их в файле Мне не нужно их импортировать. У меня есть virtualenv, поэтому я чувствую, что могу изменить своего переводчика, чтобы сделать его доступным в глобальном масштабе, но я не был уверен, что за этим стоит какая-то установленная методология. Я знаю, что это противоречит некоторым принципам pythoni c.

1 Ответ

1 голос
/ 02 апреля 2020

Можно создать пользовательский «модуль запуска», который устанавливает некоторые глобальные переменные и выполняет код в файле 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 потерпят неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...