如何在Virtualenv中解释启动时的Python代码?

时间:2016-11-08 10:47:36

标签: python django virtualenv

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

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

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

不幸的是,一些Linux发行版(Ubuntu)提供了一个全局的sitecustomize,我们的每个virtualenv sitecustomize都没有加载。

问题

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

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

目标与战略

我不在乎是否要调用此挂钩" sitecustomize"或者不同: - )

3 个答案:

答案 0 :(得分: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

您可以将其添加到现有软件包中,或将这样的软件包作为其他软件包的依赖项。

答案 1 :(得分:2)

您可以使用此答案中说明的pth文件:

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

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

答案 2 :(得分:0)

使用usercustomize

在一些Linux发行版上,存在一个全局sitecustomize,有些则没有。

这可能会导致行为混乱。

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

请参阅site

  

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