5

我想在 python 解释器启动后执行代码。

我们使用 virtualenv,到目前为止,我们有一个名为 sitecustomize.py 的文件,该文件在解释器启动期间执行。

sitecustomize.py 是我们项目的一部分。我们使用这个术语的 Django 定义:它是一个只包含配置而几乎没有代码的小型 python 模块:Django 的“项目”定义

不幸的是,一些 linux 发行版(Ubuntu)提供了一个全局 sitecustomize,并且我们的 per virtualenv sitecustomize 没有被加载。

问题

如何在 virtualenv 中的解释器启动时运行 Python 代码?

即使交互式解释器启动,也应该执行此代码。

目标与战略

我不在乎这个钩子是否被称为“sitecustomize”或不同:-)

4

3 回答 3

5

@guettli 答案的补充:您甚至可以将.pth文件作为软件包分发的一部分,因此在安装它时,它将使一些代码在 python 启动时运行,而当它被卸载时,此代码将不再运行。

示例包:

  • startup.pth
  • setup.py

内容startup.pth

import sys; print('Success!!')

内容setup.py

from setuptools import setup

setup(
    name='pth_startup_example',
    data_files=[
        ('.', ['startup.pth'])
    ]
)

创建这些文件后,pip install .在与文件相同的目录中运行。它应该安装startup.pth在您的根 python 目录中,并且您应该Success!!在每次解释器运行时看到打印。要撤消该操作,请运行pip uninstall pth_startup_example.

您可以将其添加到现有包中,或使这样的包成为不同包的依赖项。

于 2019-08-29T23:48:56.200 回答
2

您可以使用此答案中解释的 pth 文件:

https://stackoverflow.com/a/52555465/633961

pth 文件在解释器执行其输入的第一行之前被加载。

于 2019-08-27T14:54:08.757 回答
0

使用usercustomize.

在某些 linux 发行版上存在全局站点自定义,在某些不存在。

这可能会导致令人困惑的行为。

没有 linux 发行版提供 usercustomize。

查看网站

...在此之后,尝试导入名为 usercustomize 的模块,如果 ENABLE_USER_SITE 为真,该模块可以执行任意用户特定的自定义。

于 2016-11-11T08:41:41.310 回答