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
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?