Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to execute Python Code on Interpreter Startup in Virtualenv?

I want to execute code after the python interpreter has started.

We use virtualenv and up to now we had a file called sitecustomize.py which got executed during interpreter start up.

The sitecustomize.py was part of our project. We use the Django definition of this term: It is a small python module which only holds config and nearly no code: Django's Definition of "Project"

Unfortunately some linux distros (Ubuntu) provide a global sitecustomize, and our per virtualenv sitecustomize does not get loaded.

Question

How to run Python code on interpreter startup in a virtualenv?

This code should be executed even if the interactive interpreter gets started.

Goal vs Strategy

I don't care if this hook is called "sitecustomize" or different :-)

like image 761
guettli Avatar asked Nov 08 '16 10:11

guettli


2 Answers

An addition to @guettli's answer: you can even make a .pth file a part of your package's distribution, so when it is installed it will make some code run on python startup, and when it is uninstalled, this code will no longer run.

Example package:

  • startup.pth
  • setup.py

Contents of startup.pth:

import sys; print('Success!!')

Contents of setup.py:

from setuptools import setup

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

After creating these files, run pip install . in the same directory with the files. That should install startup.pth in your root python directory, and you should see Success!! printed every time your interpreter runs. To undo that, run pip uninstall pth_startup_example.

You can add this to an existing package, or make a package like this a dependency of a different package.

like image 85
kmaork Avatar answered Oct 04 '22 04:10

kmaork


You can use a pth file like explained in this answer:

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

A pth file gets loaded before the interpreter executes the first line of its input.

like image 27
guettli Avatar answered Oct 04 '22 05:10

guettli