Python Project Layout: Difference between revisions
Jump to navigation
Jump to search
Line 53: | Line 53: | ||
function main() { | function main() { | ||
manage_venv "$@" | |||
PYTHONPATH="$(dirname $0)/src" | PYTHONPATH="$(dirname $0)/src" | ||
export PYTHONPATH | export PYTHONPATH | ||
"$(dirname $0)/venv/bin/python3" -m | "$(dirname $0)/venv/bin/python3" -m gpm "$@" | ||
} | } | ||
function | # | ||
# If the virtual environment does not exist, create it based on requirements.txt. | |||
# If it does exist, recreate if '--force-init' is present among options. | |||
# | |||
function manage_venv() { | |||
force_init=false | |||
while [[ -n $1 ]]; do | |||
if [[ $1 == '--force-init' ]]; then | |||
force_init=true | |||
fi | |||
shift | |||
done | |||
if [[ -d $(dirname $0)/venv ]]; then | |||
if ${force_init}; then | |||
rm -rf "$(dirname $0)/venv" | |||
else | |||
return 0 | |||
fi | |||
fi | |||
echo "initializing venv ..." | |||
python3 --version 1>/dev/null 2>&1 || { echo "python3 not in PATH" 1>&2; exit 1; } | |||
python3 -m venv "$(dirname $0)/venv" | |||
"$(dirname $0)/venv/bin/pip" install -r "$(dirname $0)/requirements.txt" | |||
} | } | ||
Revision as of 19:56, 25 October 2022
Internal
Overview
A typical Python project layout, which allows for code written in other programming languages as well, is similar to:
. ├─ .gitignore ├─ requirements.txt ├─ run ├─ src │ └─ mypackage │ ├─ __init__.py │ ├─ __main__.py │ └─ VERSION ├─ tests │ └─ mypackage │ ├─ │ └─ venv # created automatically upon virtual environment initialization ├─ bin
Setting a Manual Project
A project set up this way will be compatible with PyCharm. Also see:
Add the dependencies to requirements.txt
. For more details, see:
Initialize the virtual environment:
cd ${PROJECT_HOME} python3 -m venv venv venv/bin/pip install -r ./requirements.txt
For more details on virtual environments, see:
.gitignore
venv/
__pycache__/
idea/
Bash Wrapper
#!/usr/bin/env bash
function main() {
manage_venv "$@"
PYTHONPATH="$(dirname $0)/src"
export PYTHONPATH
"$(dirname $0)/venv/bin/python3" -m gpm "$@"
}
#
# If the virtual environment does not exist, create it based on requirements.txt.
# If it does exist, recreate if '--force-init' is present among options.
#
function manage_venv() {
force_init=false
while [[ -n $1 ]]; do
if [[ $1 == '--force-init' ]]; then
force_init=true
fi
shift
done
if [[ -d $(dirname $0)/venv ]]; then
if ${force_init}; then
rm -rf "$(dirname $0)/venv"
else
return 0
fi
fi
echo "initializing venv ..."
python3 --version 1>/dev/null 2>&1 || { echo "python3 not in PATH" 1>&2; exit 1; }
python3 -m venv "$(dirname $0)/venv"
"$(dirname $0)/venv/bin/pip" install -r "$(dirname $0)/requirements.txt"
}
main "$@"
__main__.py
def main():
print('.x')
main()