Calling Python from bash
Internal
Overview
This article summarizes a series of aspects related to invoking Python program from bash.
Running a Python Program with a Bash Wrapper
Check out these links for the meaning of standalone Python program and Python script.
An example of a run
script for a simple Python project is available here:
Problems to be solved:
1. The problem of Python binaries. We either rely on the correct version of the Python to be present on the executing image, or we encase it it in a virtual environment. There we need to be aware of the problem of the symbolic links and binary formats.
2. The problem of package dependencies and requirements.txt
3. The layout of the source code: sources and tests, or package dependencies in a Python package repository.
Python Source Code and Tests Maintained within the Project Structure
. ├─ .gitignore # Optional ├─ src ├─ tests ├─ venv ├─ requirements.txt └─ <wrapper-bash-script>
To maintain this subtree as part of a larger Python project whose .gitignore
ignores virtual environment directories, add this to the subtree's .gitignore
:
!venv
TODO: reconcile with Python Project Layout.
Only Externally Published Packages
TODO
. ├─ venv ├─ requirements.txt └─ <wrapper-bash-script>
Using the Interpreter from the a Virtual Environment
TODO
If you want to use the interpreter from a specific virtual environment instead of the interpreter found in PATH, explicitly use the path to the binary from the virtual environment directory:
$(dirname $0)/venv/bin/python ...
Bash Wrapper that Bootstraps a Virtual Environment
function init_venv() {
[[ -d $(dirname $)/venv ]] && return 0
info "initializing venv ..."
python3 --version 1>/dev/null 2>&1 || fail "python3 not in PATH"
python3 -m venv "$(dirname $)/venv"
}
Also see:
Inline Python Code
Use bash here-doc:
python3 <<EOF
print('blah')
EOF
Also see: