Environment layout

The files and directories tn-venv writes into DEST, per platform. The layout follows PEP 405 and matches python -m venv.

Windows

.venv/
├── pyvenv.cfg              # environment configuration (see pyvenv-cfg)
├── .gitignore              # unless --scm-ignore none
├── Include/                # PEP 405 include directory
├── Lib/
│   └── site-packages/      # where pip installs into
└── Scripts/
    ├── python.exe          # venvlauncher.exe redirector (Python ≥ 3.11)
    ├── pythonw.exe         # venvwlauncher.exe (windowed)
    ├── activate            # bash / zsh (Git Bash, MSYS2, Cygwin)
    ├── activate.bat        # cmd.exe
    ├── deactivate.bat      # cmd.exe
    ├── Activate.ps1        # PowerShell / pwsh
    ├── activate.fish       # fish
    ├── activate.csh        # csh / tcsh
    ├── activate.nu         # Nushell
    ├── activate_this.py    # in-process activation
    ├── pip.exe             # ┐
    ├── pip3.exe            # ├ installed by the seeder
    └── pip3.14.exe         # ┘

Where the binaries come from

Mode

python.exe

Runtime DLLs

copies (default), Python ≥ 3.11

copy of the base install’s venvlauncher.exe, which redirects through pyvenv.cfg

resolved from the base install at runtime

copies, Python ≤ 3.10 (or no launchers)

copy of the real python.exe

python3*.dll, vcruntime*.dll copied alongside

--symlinks

symlink to the real python.exe

all python*/vcruntime* DLLs symlinked too

Symlink mode that fails (no Developer Mode privilege) falls back to copies with a warning. Free-threaded (3.13t) and debug (_d) builds use their matching launcher names.

POSIX (Linux, macOS, …)

.venv/
├── pyvenv.cfg
├── .gitignore
├── include/
├── lib/
│   └── python3.14/
│       └── site-packages/
├── lib64 -> lib            # 64-bit POSIX, except macOS
└── bin/
    ├── python3             # symlink (default) or copy of the base binary
    ├── python              # ┐ relative links to python3
    ├── python3.14          # ┘
    ├── activate
    ├── Activate.ps1
    ├── activate.fish
    ├── activate.csh
    ├── activate.nu
    ├── activate_this.py
    └── pip, pip3, pip3.14  # installed by the seeder

On POSIX, symlinks are the default; --copies copies the binary and marks it executable. PyPy environments get a pypy3 alias in addition.

What is not written

  • No files outside DEST except the transient DEST.tn-venv.lock lock file, which is removed on completion.

  • No state directories, no caches: tn-venv keeps nothing between runs, so two invocations never observe each other except through the destination itself.