如何在 Virtualenv 中执行 Python 解释器启动代码?

How to execute Python Code on Interpreter Startup in Virtualenv?

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

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

sitecustomize.py 是我们项目的一部分。我们使用这个术语的 Django 定义:它是一个小的 python 模块,它只包含配置,几乎没有代码:Django's Definition of "Project"

不幸的是,一些 linux 发行版 (Ubuntu) 提供了全局站点自定义,而我们的 per virtualenv 站点自定义没有被加载。

问题

如何 运行 Python 在 vi​​rtualenv 中启动解释器时编写代码?

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

目标与策略

我不在乎这个钩子叫 "sitecustomize" 还是不同的 :-)

使用usercustomize.

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

这可能会导致混乱的行为。

没有 linux 发行版提供用户自定义。

site

... After this, an attempt is made to import a module named usercustomize, which can perform arbitrary user-specific customizations, if ENABLE_USER_SITE is true.

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

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

@guettli 回答的补充:您甚至可以将 .pth 文件作为软件包分发的一部分,因此在安装时它会在 [=39= 上生成一些代码 运行 ] 启动,卸载后,这段代码将不再运行.

示例包:

  • 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 . 与这些文件在同一目录中。 这应该会在你的 python 根目录中安装 startup.pth,你应该会在每次你的解释器 运行 时看到 Success!! 打印出来。 要撤消该操作,运行 pip uninstall pth_startup_example.

您可以将它添加到现有包中,或者使这样的包成为另一个包的依赖项。