# Using a virtualenv for IDAPython

**URL:** <https://community.hex-rays.com/t/using-a-virtualenv-for-idapython/261>\
**Category:** IDA General\
**Tags:** idapython\
**Created:** [March 26, 2025, 9:03pm UTC](https://community.hex-rays.com/t/using-a-virtualenv-for-idapython/261 "2025-03-26T21:03:53Z")\
**Posts on this page:** 1\
**Showing post:** 9

<div class="post-metadata">

**Author:** ![mrexodia](https://sea2.discourse-cdn.com/flex002/user_avatar/community.hex-rays.com/mrexodia/32/21_2.png) [@mrexodia](https://community.hex-rays.com/u/mrexodia)\
**Post date:** [April 27, 2026, 1:14pm UTC](https://community.hex-rays.com/t/using-a-virtualenv-for-idapython/261/9 "2026-04-27T13:14:13Z")

</div>

```python
from pathlib import Path
import builtins
import os
import sys
import site

IDAUSR = Path(idaapi.get_user_idadir())
VENV = IDAUSR / "venv"

_SENTINEL = "_hcli_idapython_venv_initialized"

def activate_venv_once(venv: Path):
    # already initialized in this process
    if getattr(builtins, _SENTINEL, False):
        return

    # already effectively active
    if Path(sys.prefix).resolve() == venv.resolve():
        setattr(builtins, _SENTINEL, True)
        return

    ver = f"{sys.version_info.major}.{sys.version_info.minor}"
    site_packages = venv / "lib" / f"python{ver}" / "site-packages"
    if site_packages.exists():
        site.addsitedir(str(site_packages))

    sys.prefix = str(venv)
    setattr(builtins, _SENTINEL, True)

activate_venv_once(VENV)

```

I know this thread is ancient, but this is (most likely) the solution to the issue where the initialization script gets executed multiple times.

---

_[View the full topic](https://community.hex-rays.com/t/using-a-virtualenv-for-idapython/261)._
