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 utilize pyenv and pipx and run the code in virtualized environments with the needed version of Python


Examples

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

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

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

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?