Python

Tips and tricks for working with Python

Overview

  • As Python gets updated, older code will cease to run due to changes in Python syntax and functionality

  • To resolve this, we can run code in containers, but that adds a level of complexity

  • Another solution is to use uv (or pyenv and pipx) and run the code in virtualized environments with the required version of Python

Installation

brew install uv

View Available Python Versions

List all available python versions (both installed and not)

uv python list 

List only installed python versions

uv python list --only-installed

List only python versions not already installed

uv python list --only-downloads

Using Specific Python Versions

Install one or more versions of python

uv python install 3.8.5
uv python install 3.8.5 3.14.0

Install a tool with a specific python version

uv tool install principalmapper --python 3.9.21

Set up a Virtual Environment

Creates a virtual environment with python v3.14.0

uv venv tmp-py3-14 --python 3.14.0
source tmp-py3-14/bin/activate

Managing Tools Installed with uv

List installed tools

uv tool list 

Install tools

  • This works just like pipx or pip

uv tool install <tool>

Uninstall tools

uv tool uninstall <tool>


Old — Examples

Old — Install and Run a Python App with a Specific Python Version

  • PrincipalMapper (pmapper) is a tool that requires Python version 3.9 to run (it errors out otherwise)

# list available versions of python to install
pyenv install --list

# install python 3.9.21
pyenv install 3.9.21

# set version of python that pyenv will use
pyenv global 3.9.21

# validate version is set (should match 3.9.21 for this example)
python --version 

# install the tool, principalmapper (aka pmapper)
pipx install --python $(pyenv which python) principalmapper

Old — Set up a Python Virtual Environment

  • We can set up a virtual environment to run any version of Python we want

  • This is useful for isolating your Python code/packages without impacting your system configuration

# install python 2.7.18
pyenv install 2.7.18

# make a directory to work in 
mkdir venv-tyler-python-2-7-18

# create virtualenv for python 2.7.18
pyenv virtualenv 2.7.18 venv-tyler-python-2-7-18

# change into the directory
cd venv-tyler-python-2-7-18

# set directory for virtualenv
pyenv local venv-tyler-python-2-7-18

# validate python version (should match 2.7.18)
python --version

Parsing JSON

"ffuf -w /opt/useful/SecLists/Discovery/DNS/namelist.txt -u http://<target IP> -H HOST: FUZZ.<target domain> -o possible-subdomains.json"
import json

json_dump = "./possible-subdomains.json"

with open(json_dump) as f:
    data = json.load(f)

for host in data["results"]:
    print(host["host"], host["url"]) # print out the host & URL

View installed modules

python3 -c 'help("modules")'

[SNIP]
Cryptodome          cairo               ldb                 retrying
Cython              calendar            lib2to3             rfc3986
IPy                 catfish             libfuturize         rfc3987
IPython             catfish_lib         libpasteurize       rich
[SNIP]

View pip modules

pip list

Package    Version
---------- -------
pip        20.3.4
setuptools 44.1.1
wheel      0.37.1
xlrd       2.0.1

Old — Pyenv

Installation

  • pyenv is a useful tool for letting us quickly download and switch between multiple versions of Python

  • Full installation instructions can be found here

# install on linux
curl https://pyenv.run | bash

# add to ~/.zshrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc

# restart shell for PATH changes to take effect
exec "$SHELL"

# install python build dependencies (see install instructions as this is specific to your OS)
# this is for Debian-based systems (Ubuntu, Kali, Parrot, etc.)
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Useful commands

# view all python versions installed with pyenv
pyenv versions

# set global (default) python version for pyenv
pyenv global 3.x.x

# set local (directory) python version for pyenv (trumps global). Adds `.python-version` to directory. All pyenv commands in this directory will use this python version
pyenv local 3.x.x

# view available python versions
pyenv install --list

Old — Pipx

Installation

  • pipx is a useful tool for installing and running python code and apps in isolated virtual environments

  • Full installation instructions can be found here

# install on linux
sudo apt update
sudo apt install pipx
pipx ensurepath
sudo pipx ensurepath --global # optional to allow pipx actions with --global argument

Useful commands

# install package for user (~/.local/bin)
pipx install trufflehog

# install package for all users (/usr/local/bin/)
sudo pipx install trufflehog --global

# view installed packages
pipx list
sudo pipx list  

# uninstall packages
pipx uninstall trufflehog
sudo pipx uninstall trufflehog --global

Last updated

Was this helpful?