Skip to content

Instantly share code, notes, and snippets.

@pakkinlau
Last active July 28, 2024 04:48
Show Gist options
  • Save pakkinlau/bd802fde8551651631e799360bf94a55 to your computer and use it in GitHub Desktop.
Save pakkinlau/bd802fde8551651631e799360bf94a55 to your computer and use it in GitHub Desktop.
In this article, we will explore the ideal way to manage coding environments and coding projects using Python virtual environments and Git hooks. Managing your development environment effectively ensures consistency across different setups and enhances collaboration within teams. We will automate the setup and maintenance of these environments a…
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Article: Ideal way to manage coding environments and coding projects"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this article, we will explore the ideal way to manage coding environments and coding projects using Python virtual environments and Git hooks. Managing your development environment effectively ensures consistency across different setups and enhances collaboration within teams. We will automate the setup and maintenance of these environments and provide scripts to streamline your workflow."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## TL;DL: \n",
"\n",
"1. Creating a Python script to initialize a folder as the root of `venv` folder:\n",
" - Create a `venv` for the target directory.\n",
" - If `requirements.txt` is detected, set up the `venv` according to the `requirements.txt`.\n",
" \n",
"2. Creating a git hook that automatically detects changes in the `venv` folder and updates `requirements.txt` + `.gitignore`:\n",
" - Use search logic of `.git` for identifying the \"git repo root folder\".\n",
" - Use search logic to look for standard virtual environment markers, such as `bin/activate` (Linux/Mac) or `Scripts/activate` (Windows) for identifying the \"venv\" folder.\n",
" \n",
"3. Place the script in the root directory of the repo."
]
},
{
"attachments": {
"image.png": {
"image/png": "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nn5aL27ZotKSEl111VWKj4/X4Y4Ovf/ee3pywwb19/frnnvuUVJior55/fXq7+8f9jp3/OxnysrK0jevv15Hjx497fqWLV2q1atXKy4uTr6+vmpqatK2bdv03PPPy263y8fHR09t3KgtW7aouqZGX7rsMkVHR+vw4cN6++23tfGpp4b1osrMzNRXrrxSGRkZmjZtmurq6/XvN97Qq6+9JofD4Rrn5+endevWadmyZQoOClJzc7O2bt2qF7dskd1uV15uru666y49+OCD2rZ9u555+ml5eTlXuz7z9NNqb2/Xf/7nf+rpp5/W1q1b9aeHHnI995y8PK298kqZUlLU29ur0rIybdiwQTab7Yz+t5s7d67u+NnP9Ktf/1oZGRlasXy5goOD1dDQoGc3bdL27dslSV5eXnr2mWf0/Asv6EhHh9asWaP33ntPDz/yiCTnUporrrhCqamp8vb2VmNjo97Ztk0vPP+8Bgbv3dXr1mnNmjX69re/rZbWVknO5TZXX3215s2dq8DAQLW2tmrnzp3a+NRT6jlmRsep7uVTGzfKx8dHkrR50ya98cYbrtoAAICTx4caqSaj5s2bre6uHr386lZ3lwMAmAQMBoNuu/VWZWdn67nnnlNJaanCwsK09oordN999+mHP/qRWgd/gbXb7ZqTl6eM9HQ98uc/q6W5WStXrtRVV12ljiNHtHnzZm3btk3/+e1vKy8vb9i7+sHBwcrNy9O2d945o0AjLy9PP/rRj/Tuu+9q0+bN6u/rU05Ojq78ylfk5+enJ5580hWeLFq8WMkpKXrwwQfV3dOjlStX6vLLL5fD4dCGjRslSTk5ObrrzjtlNpv1xz/+Ud09PVq4YIGuv/56hYWF6Yknn5TkDAFuv/12paelafPmzaquqVFmRoauueYahUdE6NFHHx1Wp8Ph0E9uvllXrl2rJUuW6OZbblFvb++I1zR37lzd/tOfqqSkRI888ogMXl768pe+pHt+/nPdcsstqj948LTvz9C1X3vttcrPz9fd69c7A4SrrtJNP/iBDh86pILCQjkcDtntdplSUjRz5kz939/+ptrBZTMLFizQrbfcIovFooceflidnZ1auGCBrl63TtFRUcPCmGPNnDlTv7zvPknSxo0b1dDYKFNKitauXavU1FTdedddstvtp3Uvb7n1Vt16yy3q7unRgw8+qI7Dh0/7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cHQchKLCYnidOi91HCIiIiIiIiJqJLLvqdGnTw+4zX4J016aIHUUIiIiIiIiImpEsu+pQU2VAKu+z0kdgoiowbCNIyKqHUHg+0IiajgsalCDUOgZYMz8D6SOQY9haNhK+3Nx8QMJk1DNBKTE3JQ6BFVDUCjZxtVC69aGAIDSUjXUarXEaZq+/KxUqSMQ1TtRRKO1l3p6ejAwUAIAioqKG+WYAJCRENFoxyKiqoSB9s+LUocgosa1b8+PAABRFLFg8SqJ0xBRcyQIAn7Z9g8YGbXFL9v34MJFP6kjEVEz5zh4IN57dxVEUcSS195iMZWomShTlwICUPGfDgGC/OfUICIiIiIiIqKWicNPiFqg38/5YtLEMVLHIKJmLup2LNq2aY3s7BypoxBRC5CXV4DIyGiIENlLg6gFkX1RY+gQe7w0dQJycvPw7XfbpY5DREREKB/e9tXXP0kdg4hakJjYO/hk8zdSxyCiRib7ooaZWQfY2vZFdrZK6ihERERERERE1Ig4pwYRERERERERyRKLGkRERFTvBEHArz99iX17fsT4cc5SxyGiFsBx8EDs2/Mj3Hf/AH192XdIJ6Jakv2z/cxZH5w56yN1DCJZCgnluupERERERCRf7KlBRERERERERLIk+54aRERE1PSIoojjXr/DwECJ+PhEqeMQUQuQkpoOj0NeAMAlXYlaENkXNbikKxERUdN07PhZqSMQUQuSmpoBD08vqWMQUSOTfVGDS7oSERERERERtUycU4OIiIiIiIiIZEn2RY3MzGxERkYj6nac1FGIiIioApd0JaLGxiVdiVom2T/bbwSE4kZAqNQxiIiIiIiIiKiRyb6nBhERERERERG1TLLvqUFERERND5d0JaLGxiVdiVom2Rc1uKQrERFR08QlXYmoMXFJV6KWSfZFDS7pSkRERERERNQycU4NIiIiIiIiIpIl2Rc1uKQrERFR08MlXYmosXFJV6KWSfbPdi7pSkRERERERNQyyb6nBhERERERERG1TLLvqUFERERND5d0JaLGxiVdiVom2Rc1uKQrERFR08QlXYmoMXFJV6KWSfZFDS7pSkRERERERNQycU4NIiIiIiIiIpIl2Rc1uKQrERFR08MlXYmosXFJV6KWSfbPdi7pSkREREREgKD9iROFErUcsu+pQUREREREJAhCtT8TUfMm+54aRERE1PRw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QknQrMxMPf3002p5332KOHCg2GNfcQY++qgqV66sl156yZpw2LFjh+bMmaNevXrZJDWqV6+uV1991XoCfSEuTrNmzlSbNm2sSY3KVapofWiovv/+e+t68fHx+uD999WpUyctXbZM0pVjiaeHh+bOmWOdpykhMVG7du9Wp06d5OjgoDyzWQ/37StJevcf/7BWbxw8eFCfFjrWSlL7du3k7e2tr776yqZy5vjx4/r4o480oH9/ffvdd2rcpInc3d216NNPtTv/t8yBAwcU88cfatasmZydnUs8nKi0x8PCtmzZIj8/P/l26KDfNm2y3u/n56esrCxrhV9Jv69KGktYWJj69++vGjVq6OLFi5KuJIS6dO2qw0eOlDhhDgCwH4c6depIkk6ePGnzgD1+XNeuXVsJCQk2J085+aWXt6py5cpyd3dXTEyMTSl9fHy8zhUqwSzs6klG09PTJUmVKlWSJDVo0ECSilztT05OVmJiourXr29z/7lz52xem6urq2rVqqWYmJgrQxkcHa3/oqKi5OjoaLd5S26HvXv3avq77xYpPz175owqVqxYZDz1vn37bG4X/Hhzr1zZet+y5cs1ddo06w8bSdbk1l133XXNWEI3bFClSpXUqVMn631+XbvKZDJpY/6wlYv5P7JHjhyp6tWrW5fbtHnzNYcKZGdnKzU1VX7336+2bdtak2uJiYlauGiRLly4cM2YrudG+6JVy5ZydHAoMqwjz2xWeHi4atasec39UaVyZXl5eWn//v0ym81ydna2/tu1e7ecnJzUokULm3V27NhhUzmVkJio2NhYNW7cuFTxVKlSRfc0aKC9e/cWKe3dvWuXTCZTkS5HJpNJ48ePV926dTX93XdtSrJL4/jx4zZ/j5IUefiw3N3ddXetWsrMzNSWrVvVunVrm5n9/fz8rlTzHDpks+6+/fttbhfEdfXn+kb7DjCyrOxsubi4SLq5Y0thPj4+uhAXp7Nnz9qsG55/saFV69aSpJb33SdHR0ftuWpuh7Xr1mn4iBGKOHCgVK/B29tb58+ftxmekWc2a+zzz+ud6dNtlv192zabIXLnz5+XZPs99cknn9gkWyTpXP4w1quPy3lmsw4cPGhzX2JCghwdHOSa/9ujSdOmij192ubYl5WVpU2FEgGSrMNt9oSH2+y/uLg4nTlzRq3z919C/on8o48+qgaFfrcc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22vSxIlauHChsnNyisTx1KhRunTp0jU/LwAA+zB8UmP3ngjt3vPXLsEEAMAo8nJzJUkjR45UeHi43pk+XS4uLho+bJjGv/SSUlNSrCe6L734ojp06KBly5bpwIEDqlOnjl599VW5urjYnDx27NhRr732mvaEh2vuZ5/JYjbL399fL44bp7y8PG3ZskUbNmyQLBaNHDlS//7qKx05ckRpqamqWrWqZnzwgSQpODhYF+Li1KhhQw0dOlReXl6aOm1asSfEkmSxWGQ2m9WoYUNVrVpV33z7rc6cOSNJatmypaZNnaoTJ05o7ty5upyZqQ7t2ysoKEgeHh768aefJEmNvbz0xptv6syZM/rkk0+UnZ0tf39/dWjfXpJuuaLCYrEoNydHld3dNWrUKP3666+6cOFCqWLMy3/94196SWvWrtV333+vrl266Mknn5Srq6sqVqyoTz/9VNnZ2fr7M89o/Esv6ejRo7p48aIkKTAwUCOGD9fGjRs1PzhYzs7O6tunjyZPnqwPZszQ3r17JV2pMvHw9NSLL76okEWLNHfOHDXy8tJrr74qF1dXvfvuu9d8H9u0aaPXXntNW7duVcjixcrNyVHLli312OOPy8XFxfpart43b02YoAlvvaXLmZn65JNPlJaaqoTERK1bv15DAgP1e1iYzp0/LxcXF40JCtKJEycUEhIi98qVi8RxvQQYAMB+DJ/UAAAAZUdBfUJGRobNMImPPv5Y//nqK/V9+GHtj4jQ3XffLV9fX23YsMF6Qro/IkLnzp/XlMmTrSfMklSndm1FRkZq9uzZysrKkiTt279f337zjR584AFt2bJFKSkpiouPlyRduHBBf/zxhyRp4KOPqlq1anrjzTcVExMjSYqIiFBGRoaee+45tW/XTrt2777m68nLy1Pr1q313NixSkhIkHSlAmDUU08pKSlJ0999938x7dsnd3d3PfLII1q+YoXS0tL0cL9+Mkl6//33ra9pT3i4/m/WrFvb0YWYzWbVr19fsz/6yFpBUZoYCyo29u7da11/xS+/aODAgWrbtq3Na1++YoVatWql5s2ba+vWrapcubKGDhmi7du3a87cudaY9u7dq399/LGGDxtmTWpYLBZ5enho7pw51sRWQmKidu3erY4dO8rRweGa76O3t7dMJpPmzZuny/nJhf0REdYk07WcOnVKubm5ys7Ksm5L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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"### Git Repo Model description:\n",
"\n",
"- Assume the project structure is as follows: `project_root / env_specific_project / shared_content_project / analysis_notebook.ipynb`, where:\n",
" - `project_root`:\n",
" - Manages multiple different kinds of environments, with `.git` and `.gitignore` tracking the version for the whole project.\n",
" - `env_specific_project`:\n",
" - Contains a specific `requirements.txt` and `venv` that control the setup of one type of coding project.\n",
" - VS Code typically opens `env_specific_project`.\n",
" - `shared_content_project`:\n",
" - Create as many `shared_content_project` as needed, to keep the content of every separate project using the common `venv` from `env_specific_project`.\n",
"\n",
"![image.png](attachment:image.png)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step (1/3) Initializing a folder to be a `env_specific_project` folder"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first step in managing your coding project is to set up a Python virtual environment (`venv`). This creates an isolated environment for your project, ensuring that dependencies are managed independently from other projects.\n",
"\n",
"The script below automates the process of creating a virtual environment, installing dependencies from `requirements.txt`, and updating `.gitignore` to exclude the `venv` folder."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Explanation:\n",
"- `ensure_correct_directory(target_directory)`: Ensures the script operates within the desired directory.\n",
"- `create_venv()`: Creates a virtual environment if it doesn't already exist.\n",
"- `install_dependencies()`: Installs project dependencies listed in requirements.txt.\n",
"- `update_gitignore()`: Updates .gitignore to exclude the venv folder, preventing it from being committed to the repository."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import subprocess\n",
"import sys\n",
"\n",
"# Define the target directory here\n",
"TARGET_DIRECTORY = \"/path/to/your/target_directory\"\n",
"\n",
"def ensure_correct_directory(target_directory):\n",
" \"\"\"Ensure that the working directory is set to the target directory.\"\"\"\n",
" os.makedirs(target_directory, exist_ok=True)\n",
" os.chdir(target_directory)\n",
" print(f\"Changed working directory to {target_directory}\")\n",
"\n",
"def create_venv():\n",
" \"\"\"Create a virtual environment if it doesn't exist.\"\"\"\n",
" if not os.path.exists('venv'):\n",
" try:\n",
" subprocess.run(['python3', '-m', 'venv', 'venv'], check=True)\n",
" print(\"Virtual environment created.\")\n",
" except subprocess.CalledProcessError as e:\n",
" print(f\"Failed to create virtual environment: {e}\")\n",
"def install_dependencies():\n",
" \"\"\"Install dependencies from requirements.txt.\"\"\"\n",
" if os.path.exists('requirements.txt'):\n",
" pip_executable = 'venv/bin/pip' if os.name != 'nt' else 'venv/Scripts/pip'\n",
" try:\n",
" subprocess.run([pip_executable, 'install', '-r', 'requirements.txt'], check=True)\n",
" print(\"Dependencies installed from requirements.txt.\")\n",
" except subprocess.CalledProcessError as e:\n",
" print(f\"Failed to install dependencies: {e}\")\n",
"\n",
"def update_gitignore():\n",
" \"\"\"Add venv to .gitignore if not already present.\"\"\"\n",
" if not os.path.exists('.gitignore'):\n",
" with open('.gitignore', 'w') as f:\n",
" f.write('venv/\\n')\n",
" print(\".gitignore created and venv/ added.\")\n",
" else:\n",
" with open('.gitignore', 'r') as f:\n",
" lines = f.readlines()\n",
" if 'venv/\\n' not in lines:\n",
" with open('.gitignore', 'a') as f:\n",
" f.write('venv/\\n')\n",
" print(\"venv/ added to .gitignore.\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" target_directory = TARGET_DIRECTORY if TARGET_DIRECTORY else os.getcwd()\n",
" ensure_correct_directory(target_directory)\n",
"\n",
" create_venv()\n",
" install_dependencies()\n",
" update_gitignore()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Key attributes of hooks creation in step 2 and 3:\n",
"\n",
"- A git hook detects changes in the `venv` folder in any `env_specific_project` within `project_root`, updates `requirements.txt`, and adds the updated `requirements.txt` to the commit.\n",
"- A `pre-commit` git hook prevents files larger than 100MB from being included in any git commits. If detected, the commit is unstaged."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step (2/3) creating `post-checkout` hook\n",
"\n",
"The `post-checkout` Git hook runs after a successful `git checkout` command. This hook ensures that any changes in the virtual environment are reflected in the `requirements.txt` file. This is crucial for maintaining consistency in project dependencies across different branches or commits.\n",
"\n",
"What this script would do: \n",
"- The hook script searches for directories containing requirements.txt and a virtual environment (venv).\n",
"- It activates the virtual environment, updates requirements.txt using pip freeze, and stages the updated requirements.txt for the next commit."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Cell 1: Create post-checkout Hook\n",
"import os\n",
"\n",
"# Define the content of the post-checkout hook\n",
"post_checkout_hook = \"\"\"#!/bin/bash\n",
"# post-checkout hook to update requirements.txt\n",
"\n",
"# Find all directories in the current git repo\n",
"for dir in $(find . -type d); do\n",
" # Check if the directory contains requirements.txt and a virtual environment\n",
" if [[ -f \"$dir/requirements.txt\" ]] && ([[ -f \"$dir/venv/bin/activate\" ]] || [[ -f \"$dir/venv/Scripts/activate\" ]]); then\n",
" # Activate virtual environment\n",
" if [[ -f \"$dir/venv/bin/activate\" ]]; then\n",
" source \"$dir/venv/bin/activate\"\n",
" elif [[ -f \"$dir/venv/Scripts/activate\" ]]; then\n",
" source \"$dir/venv/Scripts/activate\"\n",
" fi\n",
" \n",
" # Update requirements.txt\n",
" pip freeze > \"$dir/requirements.txt\"\n",
"\n",
" # Add updated requirements.txt to the commit\n",
" git add \"$dir/requirements.txt\"\n",
" fi\n",
"done\n",
"\"\"\"\n",
"\n",
"# Write the post-checkout hook to the appropriate file\n",
"with open('.git/hooks/post-checkout', 'w') as file:\n",
" file.write(post_checkout_hook)\n",
"\n",
"# Make the hook executable\n",
"os.chmod('.git/hooks/post-checkout', 0o755)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step (3/3) Creating `pre-commit` hook\n",
"\n",
"This script prevent crashing the commit-push workflow due to large files. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"What this script is doing: \n",
"- Place the hook in the .git folder at the same directory level as this notebook file."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Cell 2: Create pre-commit Hook\n",
"import os\n",
"\n",
"# Define the content of the pre-commit hook\n",
"pre_commit_hook = \"\"\"#!/bin/bash\n",
"# pre-commit hook to check for large files\n",
"\n",
"max_size=100000000 # 100MB in bytes\n",
"\n",
"# Iterate over files staged for commit\n",
"for file in $(git diff --cached --name-only); do\n",
" if [ -f \"$file\" ] && [ $(stat -c%s \"$file\") -gt $max_size ]; then\n",
" echo \"$file is larger than 100MB, removing from commit\"\n",
" git reset HEAD \"$file\"\n",
" fi\n",
"done\n",
"\"\"\"\n",
"\n",
"# Write the pre-commit hook to the appropriate file\n",
"with open('.git/hooks/pre-commit', 'w') as file:\n",
" file.write(pre_commit_hook)\n",
"\n",
"# Make the hook executable\n",
"os.chmod('.git/hooks/pre-commit', 0o755)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step (4/3) Creating a `post-merge` Git Hook\n",
"\n",
"The `post-merge` Git hook runs after a merge operation, such as `git pull`. This hook can be used to detect changes in `requirements.txt` and update the virtual environment accordingly. This ensures that all dependencies are up-to-date after pulling changes from the remote repository."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import stat\n",
"import subprocess\n",
"\n",
"# Define the content of the post-merge hook\n",
"hook_content = '''#!/bin/bash\n",
"# post-merge hook to update virtual environment if requirements.txt has changed\n",
"\n",
"python3 <<'EOF'\n",
"import os\n",
"import subprocess\n",
"import filecmp\n",
"\n",
"def update_venv_if_requirements_changed():\n",
" \"\"\"Update virtual environment if requirements.txt has changed.\"\"\"\n",
" requirements_path = 'requirements.txt'\n",
" old_requirements_path = 'old_requirements.txt'\n",
"\n",
" # Check if requirements.txt exists\n",
" if os.path.exists(requirements_path):\n",
" # Copy current requirements.txt to a temporary file\n",
" if os.path.exists(old_requirements_path):\n",
" os.remove(old_requirements_path)\n",
" os.rename(requirements_path, old_requirements_path)\n",
"\n",
" # Run git command to check out the previous version of requirements.txt\n",
" subprocess.run(['git', 'checkout', 'HEAD~1', '--', requirements_path])\n",
"\n",
" # Compare the files\n",
" if not filecmp.cmp(requirements_path, old_requirements_path, shallow=False):\n",
" # If they differ, update the virtual environment\n",
" pip_executable = 'venv/bin/pip' if os.name != 'nt' else 'venv/Scripts/pip'\n",
" try:\n",
" subprocess.run([pip_executable, 'install', '-r', requirements_path], check=True)\n",
" print(\"Virtual environment updated with new dependencies.\")\n",
" except subprocess.CalledProcessError as e:\n",
" print(f\"Failed to update virtual environment: {e}\")\n",
"\n",
" # Restore the current version of requirements.txt\n",
" os.rename(old_requirements_path, requirements_path)\n",
"\n",
"if __name__ == \"__main__\":\n",
" update_venv_if_requirements_changed()\n",
"EOF\n",
"'''\n",
"\n",
"# Define the path to the post-merge hook\n",
"hook_path = os.path.join('.git', 'hooks', 'post-merge')\n",
"\n",
"# Write the hook content to the post-merge file\n",
"with open(hook_path, 'w') as hook_file:\n",
" hook_file.write(hook_content)\n",
"\n",
"# Make the post-merge hook executable\n",
"st = os.stat(hook_path)\n",
"os.chmod(hook_path, st.st_mode | stat.S_IEXEC)\n",
"\n",
"print(\"post-merge hook created and made executable.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"In this article, we explored how to manage coding environments and projects efficiently using Python virtual environments and Git hooks. By automating the setup and maintenance of these environments, you can ensure consistency and streamline the workflow for your development team.\n",
"\n",
"We covered:\n",
"- Initializing a project folder with a virtual environment.\n",
"- Creating a `post-checkout` Git hook to update `requirements.txt`.\n",
"- Creating a `pre-commit` Git hook to prevent large files from being committed.\n",
"\n",
"These steps help maintain a clean and manageable project structure, making collaboration more effective. Feel free to adapt these scripts to suit your specific project requirements.\n",
"\n",
"Happy coding!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment