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.
How to run Python code on interpreter startup in a virtualenv?
This code should be executed even if the interactive interpreter gets started.
I don't care if this hook is called "sitecustomize" or different :-)
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With