Last active
July 6, 2024 19:45
-
-
Save niftycode/fd1442c624798c5f2773db0b443827cc to your computer and use it in GitHub Desktop.
Shell script to create a Python project
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash - | |
#=============================================================================== | |
# | |
# FILE: createPythonProject.sh | |
# | |
# USAGE: ./createPythonProject.sh | |
# | |
# DESCRIPTION: Create a new Python project | |
# | |
# VERSION: 1.4 | |
# REQUIREMENTS: --- | |
# BUGS: --- | |
# NOTES: --- | |
# AUTHOR: @niftycode | |
# ORGANIZATION: | |
# CREATED: December 10th, 2021 | |
# REVISION: May 30th, 2024 | |
#=============================================================================== | |
set -o nounset # Treat unset variables as an error | |
echo "Enter a project name:" | |
read name | |
mkdir $name | |
cd $name | |
# Create the subfolders 'docs' and 'tests' | |
mkdir docs | |
mkdir tests | |
# Create __init__.py file in the 'tests' folder | |
cd tests | |
touch __init__.py | |
cd .. | |
cat > setup.py << EOF | |
import setuptools | |
setuptools.setup() | |
EOF | |
cat > setup.cfg << EOF | |
[metadata] | |
name = | |
version = | |
author = | |
author_email = | |
url = | |
description = | |
long_description = file: README.md | |
long_description_content_type = text/markdown | |
license = MIT | |
license_file = LICENSE | |
requires_python = >=3.12 | |
classifiers = | |
License :: OSI Approved :: MIT License | |
Operating System :: OS Independent | |
Programming Language :: Python :: 3 | |
Programming Language :: Python :: 3.12 | |
Programming Language :: Python :: Implementation :: CPython | |
EOF | |
touch requirements.txt | |
touch requirements-dev.txt | |
touch Changelog.md | |
touch CONTRIBUTING.md | |
cat > README.md << EOF | |
# $name | |
EOF | |
# Create subfolder with the name of the project and | |
# create __init__.py and main.py file | |
mkdir $name | |
cd $name | |
touch __init__.py | |
cat > main.py << EOF | |
#!/usr/bin/env python3 | |
""" | |
Description goes here... | |
Version: 1.0 | |
Python 3.12+ | |
Date created: May 4th, 2024 | |
Date modified: - | |
""" | |
import logging | |
logging.basicConfig(level=logging.DEBUG) | |
logger = logging.getLogger() | |
def main() -> None: | |
pass | |
if __name__ == '__main__': | |
main() | |
EOF | |
echo | |
read -p "Do you need a pytest.ini file? (Y/n)" pytest | |
pytest=${pytest:-Y} | |
if [ $pytest = "Y" ] | |
then | |
cd .. | |
touch pytest.ini | |
echo "[+] Created pytest.ini file!" | |
else | |
echo "[-] pytest.ini will not be created" | |
cd .. | |
fi | |
if test -f "pytest.ini"; then | |
echo "[pytest]" >> pytest.ini | |
echo "norecursedirs = .* src *.egg dist build" >> pytest.ini | |
echo "addopts = -rsxX -l --tb=short --strict-markers" >> pytest.ini | |
fi | |
# Create virtual environment | |
echo | |
read -p "Do you need a virtual environment? (y/N)" venv | |
venv=${venv:-N} | |
if [ $venv = "y" ] | |
then | |
echo "[+] Creating a virtual environment..." | |
python3 -m venv .venv | |
echo | |
echo "Done!" | |
echo | |
echo "Start the virtual environment using 'source .venv/bin/activate'." | |
else | |
echo "[-] A virtual environment will not be created!" | |
fi | |
echo | |
echo "-----------------------" | |
echo "All done! Exit program." | |
echo "-----------------------" | |
echo |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment