https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_b964594d3d957944241961017b9eb19bf02834de44cce93d8e67dd306852dbe346167181e455e33d5268ea01d973d77bb056848546f31794f31a4c31a9da5aa3.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_23f1ae74c634d7e5e0a067c22b7a8c2d79c3ffd9a3b9395fc82c1b3b99635552b994f1f72f532f28ceaff1ea054ea026cd488cd62fa03a4ad91d212b5f3c5a72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_451c3884f51125f7687e5bb07cfab033c04cb7174c33f93213b2af4bad2af13cf48b92a7fa95fc86d7d436f355938a3ac50aa119cdb7c9b6d5a52815c3e6033e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bfff9e63e857e9ee612e292d4a6edf3ced64d6a756925c953a9d8f77845ff601eca64d73dfa48756b1a9f4a4d6de6127a273bcde16ddeb71a22383460f4e94b0.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4dd7e1d73ae5eda35ed5ad6aa965b612dbf483ece3ca50c1e8e30ad8dff1c66a160ed75e958e2db399661d229874783e0834ad813a479437035666b8e9e3386.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4fce0769137d4cd096989b0349bc3c2bbfca79ac311fdf714c41ab24d87551c7b49b756c8a8de090b0714a0ad0560e49fa532ba5a88875ea4afd78efac464df6.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85cec8b07d60426b11040e471babca0d2f9c8dc87a9b56e06cad39828f7f67179e29609100f282a574872c9a93fb635b25416300eb4c97bc5a653d00cf6f8dbf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_6768e5a27d4d357347338621c0d20bd269b126d30eec796193390f2f530fbaea60af84130c46f9786114be65149e661e87d55c339219c90aa76396d7e5b734ef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_2acd6bdff3b680341e8c727da5169a647123eb8fd0a90253161b4c3af272c15d293bf9bb217008bb13f84d1910b0e166798001f8603b6c026d5c20a76c41d47c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_9b371d5f8f9a4225a86a0ccd6a861b7594e7f58435219bcea349553f8edefdf61121d8e40320ab317b481b381ab7797a110700e2957816ebcb60b7f23570a40d.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_268c9bba6ba649318f0da28c37b09a9bbfa371210f9b6b52faa7fd8ae94abf6b3c3bfeb5df5705c93495ce1152ca58aeabc435d6c6c1bd959025165c3f50e086.js
  • Skip to main content
  • Skip to footer
  • Home
  • Featured
    • Advanced Python Topics
    • AWS Learning Roadmap
    • JWT Complete Guide
    • Git CheatSheet
  • Explore
    • Programming
    • Development
      • microservices
      • Front End
    • Database
    • DevOps
    • Productivity
    • Tutorial Series
      • C# LinQ Tutorials
      • PHP Tutorials
  • Dev Tools
    • JSON Formatter
    • Diff Checker
    • JWT Decoder
    • JWT Generator
    • Base64 Converter
    • Data Format Converter
    • QR Code Generator
    • Javascript Minifier
    • CSS Minifier
    • Text Analyzer
  • About
  • Contact
CodeSamplez.com

CodeSamplez.com

Programming And Development Resources

You are here: Home / Development / Python Local Development Environment: Complete Setup Guide

Python Local Development Environment: Complete Setup Guide

Updated August 23, 2025 by Rana Ahsan Leave a Comment ⏰ 11 minutes

python local environment setup

Your development environment can make or break your coding experience. Getting your Python local development environment right from the start isn’t just helpful—it’s essential. I’ve seen developers who struggled unnecessarily because they skipped this crucial foundation. Let me guide you through creating the perfect Python setup that will serve you well for years to come. 🐍

Why Your Local Setup Matters

When I first started coding in Python, I made the rookie mistake of installing packages globally and mixing different project dependencies. The result? Constant version conflicts and mysterious bugs that took hours to troubleshoot. A proper local development environment eliminates these headaches completely.

A well-configured Python environment gives you:

  • Isolated dependencies for each project
  • Consistent behavior across different machines
  • Version control for Python itself
  • Simplified package management
  • Reproducible environments that can be shared with teammates

With the right setup, you’ll spend less time debugging environment issues and more time actually writing code. Trust me, this investment pays dividends every single day of your coding career.

Essential Components of a Python Local Development Environment

Every robust Python development setup needs these core components:

  1. Python interpreter (preferably managed by a version manager)
  2. Virtual environments for project isolation
  3. Package management tools
  4. A code editor or IDE
  5. Version control system

I’ll walk you through setting up each of these components step by step, with different configurations depending on your project needs.

Basic Python Setup: Getting Started

Installing Python

First things first—let’s get Python installed on your system. While you could download the installer from python.org, I recommend using a version manager instead.

Using a Python Version Manager

After wasting countless hours managing multiple Python versions manually, I discovered pyenv, and it changed everything. Pyenv lets you install and switch between multiple Python versions effortlessly.

Here’s how to install pyenv on macOS using Homebrew:

brew install pyenv
Bash

For Windows, I recommend using pyenv-win:

pip install pyenv-win
Bash

Once installed, add the following to your shell configuration file (.bashrc, .zshrc, etc.):

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
Bash

Now you can install any Python version:

pyenv install 3.11.4
Bash

And set it as your global default:

pyenv global 3.11.4
Bash

Learn more about Python Version Management

Setting Up Virtual Environments

Virtual environments are absolutely critical for Python development. They create isolated spaces where you can install packages without affecting your system Python or other projects.

I once had to rescue a colleague’s project that was completely broken because they installed conflicting packages globally. Don’t make that mistake!

Using venv (Built-in)

Python comes with venv built-in. Here’s how to use it:

# Create a virtual environment
python -m venv myproject_env

# Activate it (on Unix/MacOS)
source myproject_env/bin/activate

# Activate it (on Windows)
myproject_env\Scripts\activate
Bash

When activated, your command prompt will show the environment name, indicating that any packages you install will be isolated to this environment.

Using virtualenv and virtualenvwrapper

For more advanced features, I prefer virtualenvwrapper, which builds on virtualenv and makes management even easier:

# Install virtualenvwrapper
pip install virtualenvwrapper

# Add to your shell configuration
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Bash

Now you can create and manage environments with simple commands:

# Create a new environment
mkvirtualenv myproject

# Work on an existing environment
workon myproject

# Deactivate the current environment
deactivate
Bash

Learn more about python virtual environments

Package Management with pip

Once your virtual environment is activated, you can install packages without affecting other projects:

pip install requests pandas matplotlib
Bash

I always create a requirements.txt file to document my project dependencies:

pip freeze > requirements.txt
Bash

This makes it easy for others (or future you) to replicate your environment:

pip install -r requirements.txt
Bash

Managing Environment Variables

Don’t hardcode sensitive information like API keys or database credentials in your code—I learned this the hard way when I accidentally pushed production secrets to GitHub!

Use .env files with python-dotenv for local development:

pip install python-dotenv
Bash

Create a .env file in your project root:

# .env
DATABASE_URL=postgresql://localhost/myapp_dev
SECRET_KEY=your-secret-key-here
API_KEY=sk-1234567890abcdef
Plaintext

Load them in your Python code:

import os
from dotenv import load_dotenv

load_dotenv()
database_url = os.getenv('DATABASE_URL')
secret_key = os.getenv('SECRET_KEY')
Python

Always add .env to your .gitignore file and create a .env.example template for your team.

learn more about managing environment variables in python

Framework-Based Python Development Environments

Django Setup

Django is a fantastic framework for web development, but setting it up properly is crucial. Here’s my battle-tested approach:

# Create and activate virtual environment
python -m venv django_project_env
source django_project_env/bin/activate

# Install Django
pip install django

# Create a new Django project
django-admin startproject mysite

# Create a requirements file
pip freeze > requirements.txt

# Navigate to project and run server
cd mysite
python manage.py runserver
Bash

Flask Setup

Flask is lightweight and perfect for smaller projects. Here’s how I set it up:

# Create and activate virtual environment
python -m venv flask_project_env
source flask_project_env/bin/activate

# Install Flask
pip install flask

# Create a simple app.py file
echo 'from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run(debug=True)' > app.py

# Run the application
flask run
Bash

Docker-Based Python Development Environment

Docker revolutionized how I approach development environments. It ensures that your application runs exactly the same way everywhere—from your laptop to production.

Setting Up a Dockerized Python Environment

Create a Dockerfile in your project root:

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]
Dockerfile

Create a docker-compose.yml file for more complex setups:

version: '3'

services:
  app:
    build: .
    volumes:
      - .:/app
    ports:
      - "5000:5000"
  
  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=mysecretpassword
      - POSTGRES_USER=myuser
      - POSTGRES_DB=mydb
    ports:
      - "5432:5432"
YAML

Run your application with:

docker-compose up
Bash

This approach completely eliminates the “it works on my machine” problem.

Learn more about multi-container docker Setup for python apps

IDE and Code Editor Setup

A good IDE dramatically increases your productivity. After trying nearly every editor available, I’ve settled on a few favorites:

VSCode Setup for Python

Visual Studio Code has become my go-to editor. Here’s how I set it up:

  1. Install VSCode from code.visualstudio.com
  2. Install the Python extension
  3. Configure settings for Python development:
{
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.formatting.provider": "black",
    "editor.formatOnSave": true,
    "python.testing.pytestEnabled": true
}
JSON
  1. Install helpful extensions:
    • Python Extension Pack
    • Python Docstring Generator
    • Python Test Explorer

Pro Tip💡: Learn how to supercharge your VSCode IDE with AI Coding Agent?

PyCharm Setup

For larger projects, I sometimes prefer PyCharm:

  1. Install PyCharm from JetBrains
  2. Set up your project interpreter to use your virtual environment
  3. Configure automatic code formatting with Black
  4. Set up test runners for pytest or unittest

Essential Development Tools

Beyond the basics, these tools will supercharge your Python development:

Linting and Formatting

Code quality tools save me from endless code review comments. Here are my essentials:

pip install black flake8 isort pylint
Bash

Add a setup.cfg file to your project:

[flake8]
max-line-length = 88
exclude = .git,__pycache__,build,dist

[isort]
profile = black
multi_line_output = 3

[pylint]
max-line-length = 88
Bash

Testing Framework

Write tests from day one, with coverage tracking — you’ll thank me later:

pip install pytest pytest-cov
Bash

Troubleshooting Python Environment Issues

Even with the perfect setup, you’ll occasionally run into issues. Here are solutions to the most common problems I’ve encountered:

Package Conflicts

If you’re seeing package conflicts:

# Create a fresh environment
python -m venv fresh_env
source fresh_env/bin/activate

# Install packages one by one, checking compatibility
pip install package1
pip install package2
Bash

Path Issues

If Python or packages aren’t found:

# Check your Python path
which python
python -c "import sys; print(sys.path)"

# Check if a package is installed
pip list | grep package_name
Bash

Virtual Environment Problems

If your virtual environment is misbehaving:

# Deactivate and recreate
deactivate
rm -rf myenv
python -m venv myenv
source myenv/bin/activate
Bash

Advanced Python Dev Environment Management

As your projects grow, consider these advanced techniques:

Poetry for Dependency Management

Poetry has transformed how I manage dependencies:

# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -

# Create a new project
poetry new myproject
cd myproject

# Add dependencies
poetry add requests pandas

# Install dependencies
poetry install

# Activate the virtual environment
poetry shell
Bash

pyproject.toml Configuration

Modern Python projects use pyproject.toml for configuration. Here’s an example(poetry) :

[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "My awesome Python project"
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.28.1"

[tool.poetry.dev-dependencies]
pytest = "^7.1.2"
black = "^22.6.0"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
TOML

Conclusion: Building Your Perfect Python Environment

Setting up the perfect Python local development environment takes a bit of time upfront, but the productivity gains are massive. I’ve gone from spending hours debugging environment issues to focusing almost exclusively on writing code and solving interesting problems.

Remember these key principles:

  • Always use virtual environments
  • Manage Python versions with a version manager
  • Document your dependencies religiously
  • Automate linting and formatting
  • Write tests from the beginning

Which aspect of your Python development environment do you think makes the biggest difference in your daily workflow? For me, it’s the combination of pyenv, Poetry, and pre-commit hooks that has eliminated nearly all environment headaches.

Now that you have your Python local development environment set up perfectly, you’re ready to build amazing things. Happy coding! 🚀


Share if liked!

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on Pinterest (Opens in new window) Pinterest
  • Click to share on Reddit (Opens in new window) Reddit
  • Click to share on Tumblr (Opens in new window) Tumblr
  • Click to share on Pocket (Opens in new window) Pocket

You may also like


Discover more from CodeSamplez.com

Subscribe to get the latest posts sent to your email.

First Published On: May 26, 2025 Filed Under: Development, Featured Tagged With: python

About Rana Ahsan

Rana Ahsan is a seasoned software engineer and technology leader specialized in distributed systems and software architecture. With a Master’s in Software Engineering from Concordia University, his experience spans leading scalable architecture at Coursera and TopHat, contributing to open-source projects. This blog, CodeSamplez.com, showcases his passion for sharing practical insights on programming and distributed systems concepts and help educate others.
Github | X | LinkedIn

Reader Interactions

Leave a ReplyCancel reply

Footer

Subscribe via Email

Follow Us

  • Facebook
  • X
  • Pinterest
  • Tumblr

Explore By Topics

Python | AWS | PHP | C# | Javascript

Copyright © 2025

https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_5b3dfd8da6836ce60a3f14c23cfc90dc969f95aff7c635411d8b61abbb8f93b4e5261c41539093290ac765a79b314502fe388bd00275ac999c46a0d12087db9e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_c402e38f1879c18090377fb6b73b15ac158be453ecda3a54456494fe8aba42b990c293bae5424e5643d52515ffc2067e0819995be8d07d5bba9107a96780775c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_ffc3511227531cc335353c54c3cbbaa11d0b80e5cb117478e144436c13cd05495b67af2e8950480ed54dbdabcdcef497c90fdb9814e88fe5978e1d56ce09f2cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d57da9abfef16337e5bc44c4fc6488de258896ce8a4d42e1b53467f701a60ad499eb48d8ae790779e6b4b29bd016713138cd7ba352bce5724e2d3fe05d638b27.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_edc0e9ef106cc9ef7edd8033c5c6fcff6dc09ee901fd07f4b90a16d9345b35a06534f639e018a64baaf9384eee1df305570c1ecad747f41b787b89f53839962b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_5a3aa28cd4eb24db3e3e2acd58230ff5cdc78120b94c2b118227d4c7806ecac03978e1a10404240314f66a3b82af8823768abb8b9eccc5003d198eb077ea12b8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_dccc492dbbfdac33d1411f9df909e849c7268fcf99b43007f278cde3a0adc0ae00e8cae5ec81cf255b9a6eae74e239ba1fa935572af77173219cb081f7d2327d.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_00bacf9e36181aac2b666d110cd9d82257f846766e7041b2d7b3c909b458982931ccc9b203e37098fbdfcf43ca359cf04e3824a724a6789fc204196d3a72ad29.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_259645f7837b2e3bbea4da322a28e9d966b3e0be06f6f147e120ed7acb1b3657b8d3cb198e86902299b01216de148c1f7c8f3cedf825d705ee5b9b749ddcff01.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_aa5a5d229b421633f4247380e1e8c0a4854f82efb35d13a5b07b7b8fbe22e98842a580f063e5965345a51c477a7f5c2585edf8dd7d896b2438dc61f91d8d970c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bb8058a9e234a7ffaa98891b1df7f6b8e67410e6984568b151daa05113b8c7f89d7b5918ae73f020998a16f7f5a087a13d6a9a5e5d7c301e2ca12fd9d1f8d177.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_647fb67570c6108fb10ae6785a1abdbecac99ffcf80351d0bef17c3cf783dce497b1895fcdaae997dacc72c359fbfb128cc1540dd7df56deb4961e1cd4b22636.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f7a298a0f1f754623fe3b30f6910ce2c1373f715450750bd7a391571812b00df1917e2be90df6c4efc54dbdfda8616278a574dea02ba2c7a31992768df8db334.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_df30604d5842ef29888c3c1881220dc6d3f8854666d94f0680c5f38aa643c5fb79b10eb9f10998d8856eb24ca265783195937434fd6c2bb8e4846df0277a7fb7.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f17fe6fb0993f1703181d7ae9e9ea570f3d33a43afd6f2a4567daa1a6745698c7b8193dc72d50991d2dd87cd3dcf663959206607d193a9b57926d061a1f50aef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_945dcbab2c2a131f3c90f4fb91776b76066d589f84fb55bff25cd5d79a56218000616bfca1f0af9a74f32348693707af49e8fe624de8aa34f1e1c5b6a25709cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_65820d252e1b93596de6697fd5f02483f3e2524a0696c7d698b64745edb32bf5831a90e556842f5f88c8209766cc78ca3a41cf783d20236a9f90d4a7ea7b3e72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_7286884797a1210857e2a36f8ab46604b0034b6abf512380447a5763c873db6a72b8547f660053de0ea69faef1eb64878f39ff4b0ea86c963efab95764a3bf5b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_cbcf6c279ac6c6a25ae138bf964e64a5fd90d22dcdf8a53b6fe7b72cefa51063bfb0181a6e50dd2acdcae2795619887d1d83b10461e44e5103be756f2588d837.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_47965bc586b95810c925b9df3314e0c9a5cd121e70ca0831f87df0bc034695de4f83ecf2def86f737e14614ee138794473cf32cd3082a5d38db9dec0c1f266fa.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_12aa201cea075846d266536aa222d64d4088b851d87f55dac5e611b77add6826c8ebc6e82650fcd1a9e88a05a0072dedd195719c5f64cd4580a0acd8aee05d92.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_7859317dea28a85c983d7b2a933704b193600b52929d2d894deae21a5d78f1f9715214d4c2ed1b925e9183146806725621d586779705dea3b651260eb53a2f8a.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_258fe9dcbf12d7234782859df02a231a2298318d07bc242e45734c8bef0e8162d0dc3ace09a48c4d7525859903b2ae12fd15c811b44de161233f476cbe085f3f.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d87ea86dd0e7ecdd5fe7a5bb67becf943e57c3add866b456034d51663d099031bd563e12f61fdccc044969adf938a8584ed22ccd401ab8b669e20e4f92fb54e8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_35311c3d71a3605fad4e1d6b50f3911311cdcc46418bdf56d6d0308a75a69585269ee7582a335e29989adf308fa1a81a10a2c2d4e257e9d680447a4996f6269e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_ed203ae78cbd5d0d7f0de78c3fc2160c89a1f23ae60fe4dedd0f2422beb9b63f801d45786553e4ed4913fc57caaf8cad3112579c33c8914e339634f35e3cc4e8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4d1fae16f3501b97ac1dbc8ca35997b3d3899c98dd478a204920e92de4a093d0c2e9ab1ccbc16b0c3423c0be3ef59d7aaefc6edd559961e5169236aa4c73c7f7.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4fc182ef03c12e9dcadd6febc3dbaa4a29134469057ca9e8ec0be2f2de29a494514ff4b59798e74debf26f78b2df2b3e2665c69b77035761fb463b783202915.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85c0f2769456e60153b0fd8364b82a035da53384f62de342d9bdca806f3f1ea56486919a00497a18d457949c82bf8bfacc4423fc332074ddf71a49a8fe628fff.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67f99bef3678c549a14b5f2ff790cce6aba338dca29020755444231b45fa0f980f795e3658496ba70739a099b47b22bc2eab564343ac6132309de3adbbae3455.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_09eecfdd96206ed13830b4b93cfb2cc75cd38083671a34194437b5734b5bb38712209dc335b07e3266ceb3c3a44a155b9bbe5f3e0e1105b19dd45d3def76f020.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4c089fbdb88e3b624a6f884d3ba1bf606f003bfcd3742376d0d353cd62181dc663aa3811a56361c3100de488fc4d6595a50de2b26f058921ba74f5f2c1b5be00.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_897ff6ac314c5f5e0f496c6af624bd9abf296a02cb5aeb850b9220b6dc3ce2fc4004cb02ed8b59d59d4b9c9d90f050d6eebc1d08ecaebab2f671f7d9367e6410.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67d1e619e71d36ae00ddcf85ee18628bb4eb64fcb3d6119b463e75cb987013420a21136d19cd03e6634ccc01cfa9af4a357930e4cf6900953b7812efb4f249fb.js