Есть ли способ всегда выполнять скрипт при запуске Python? (аналогичный site.profile в R) - PullRequest
0 голосов
/ 28 июня 2018

На языке программирования R имеется файл site.profile, который определяет некоторый код, который R-процесс выполняет при запуске. Есть ли подобная функциональность в Python?

Редактировать: чтобы уточнить, этот скрипт должен выполняться, если пользователь вызывает python из командной строки, а также если python порожден из другого процесса (например, если скрипт пользователя использует подпроцесс для порождения другого питона).

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Механизм Python называется ... site. Это модуль, который автоматически импортируется и настраивает вашу среду. Если он находит модули sitecustomize.py и usercustomize.py, он также импортирует их. Таким образом, именно в этих двух местах вы можете разместить индивидуальные настройки для всего сайта, которые вы хотите сделать постоянной частью своей среды Python. Подробнее см. site документацию .

0 голосов
/ 28 июня 2018

Если вы хотите это только для интерактивных сеансов (в отличие от того, что происходит каждый раз, когда вы запускаете скрипт с python myscript.py или ./myscript или с модулем python -m mymodule), вам нужна переменная окружения PYTHONSTARTUP

Если это имя читаемого файла, команды Python в этом файле выполняются до отображения первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имен, где выполняются интерактивные команды, так что объекты, определенные или импортированные в нем, могут использоваться без квалификации в интерактивном сеансе…

Если вы хотите, чтобы это всегда происходило вечно, вам, конечно, нужно установить эту переменную среды в каком-то подходящем глобальном месте - например, свой профиль оболочки на большинстве * nix-платформ или ваш профиль оболочки и ваш профиль launchd в macOS. или соответствующая часть панели управления в Windows (соответствующая часть изменяется практически при каждой новой версии Windows, но в названии обычно указывается «System»).

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


Если вы хотите, чтобы это происходило для каждого сеанса Python, даже когда какая-то другая программа выполняет скрипт Python, и вы даже не знали, что он это делает ... то, что вам нужно, это либо usercustomize или sitecustomize, как указано в документации site:

Этот модуль автоматически импортируется во время инициализации. Автоматический импорт может быть отключен с помощью опции -S интерпретатора.

...

После этих манипуляций с путями делается попытка импортировать модуль с именем sitecustomize, который может выполнять произвольные настройки для конкретного сайта. Обычно он создается системным администратором в каталоге site-packages.

После этого делается попытка импортировать модуль с именем usercustomize, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE имеет значение true. Этот файл предназначен для создания в пользовательском каталоге site-packages (см. Ниже), который является частью sys.path, если он не отключен -s

Итак, вы хотите найти подходящее место, чтобы переопределить это. Сначала попробуйте это:

python3 -m site

Затем, если это не даст вам sys.path (возможно, только на довольно старом Python, но на всякий случай ...), также сделайте это:

python3 -c 'import sys; print('\n'.join(sys.path))'

Если вы хотите, чтобы эта настройка выполнялась только для текущего пользователя, вы хотите создать файл usercustomize.py в каталоге USER_SITE, указанном в python3 -m site. Если каталог не существует, создайте его.

Если вы хотите, чтобы это происходило со всеми пользователями, вам нужен файл sitecustomize.py в одной из директорий sys.path. Проблема в том, что он уже может быть. Например, большинство встроенных в Python пакетов дистрибутивов Linux имеют свои собственные sitecustomize модули. Если есть, python3 -c 'import sitecustomize; print(sitecustomize.__file__) скажет вам, где это. Затем вы можете отредактировать или скопировать его, отредактировать эту копию и поместить эту копию где-то, что находится раньше sys.path, чем оригинал. Как правило, /usr/local, вероятно, лучше, чем /usr, а site-packages, вероятно, лучше, чем dist-packages, вероятно, лучше, чем что-либо еще.

0 голосов
/ 28 июня 2018

Файл, указанный вашей переменной среды PYTHONSTARTUP будет запущен при запуске интерактивного сеанса Python

И USER_SITE/usercustomize.py будут запущены для неинтерактивного сеанса Python.

Запустите python -c "import site; print(site.USER_SITE)", чтобы найти USER_SITE папку

...