Skip to content

Black

In Python development, it's standard practice to list development tools and libraries under [dev-packages] in your Pipfile when using Pipenv. This helps differentiate between packages needed for development (like linters, formatters, and testing tools) and those needed for the application to run in production.

The black package, which is a code formatter, is typically used as a development tool rather than something required for the production environment. Therefore, it should be added to [dev-packages].

Here’s how you can ensure black is added to [dev-packages]:

  1. Install black as a development package:

    pipenv install --dev black
    

    This command installs black and places it under the [dev-packages] section of your Pipfile.

  2. Verify your Pipfile:

    Check the Pipfile to ensure black is now listed under [dev-packages]:

    [dev-packages]
    black = "*"
    
  3. Format Your Code:

    You can format your Django project's code by running Black on your project directory. Typically, you run it from the root of your project:

    black .
    

    This command will recursively format all Python files in the current directory and its subdirectories.

By following these steps, you'll keep your development dependencies properly organized and ensure that your production environment only includes the packages necessary for runtime.

Configure Black

You might want to configure Black to fit your preferences. Create a pyproject.toml file in the root of your project if you don't already have one, and add Black’s configuration to it. Here’s a basic example:

Copy code
[tool.black]
line-length = 88

The line-length option is set to 88 by default, but you can adjust it according to your project's style guide.

toml
[tool.black]
line-length = 88
target-version = ['py38']
skip-string-normalization = true
exclude = '''
/(
  \.tox
  | \.nox
  | \.git
  | \.mypy_cache
  | \.pytest_cache
  | \.eggs
  | _build
  | buck-out
  | build
  | dist
  | migrations
)/
'''
include = '\.pyi?$'
verbose = true

Integrate Black with Your Development Workflow

IDE Integration: Many IDEs and editors have plugins or built-in support for Black. For example, in Visual Studio Code, you can install the Black extension and configure it to format your code on save.

Pre-commit Hook: To ensure that Black is always run before commits, you can use a pre-commit hook. First, install the pre-commit package:

pip install pre-commit

Create a .pre-commit-config.yaml file in your project's root directory with the following content:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.4.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer

  - repo: https://github.com/psf/black
    rev: 23.3.0  # Use the latest version or the one you prefer
    hooks:
      - id: black
        language_version: python3

Then, install the pre-commit hooks:

pre-commit install

Now, Black will automatically format your code before each commit.

Continuous Integration (CI)

If you use a CI service (like GitHub Actions, GitLab CI, or others), you can add a step to run Black as part of your CI pipeline to ensure that all code is properly formatted before merging.

Here’s an example of a GitHub Actions workflow that runs Black:

name: Format Check

on: [push, pull_request]

jobs:
  black:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.9'
      - name: Install dependencies
        run: |
          pip install black
      - name: Check code formatting
        run: |
          black --check .

This setup will ensure your Django project maintains a consistent style and follows best practices for code formatting.


Which one to use : vs code or command line

Both methods you mentioned—using the command line (black .) and the VS Code extension—are effective ways to use Black, the popular Python code formatter. Your choice depends on your workflow preferences. Here’s a breakdown of both approaches:

Using Black via Command Line

  1. Install Black: If you haven't already installed Black, you can do so using pip:

    pip install black
    pipenv install black --dev
    
  2. Run Black from the Command Line: Navigate to the directory containing your Python files and run:

    black .
    

    This will format all Python files in the current directory and its subdirectories. You can also specify individual files or directories:

    black file1.py file2.py
    black src/
    
  3. Optional Configuration: You can create a pyproject.toml file in your project root to customize Black's behavior. For example:

    [tool.black]
    line-length = 88
    

Using Black with VS Code Extension

  1. Install the Black Extension: Open VS Code, go to the Extensions view (Ctrl+Shift+X), and search for "Black Formatter" or "Python". You might find it as part of the Python extension by Microsoft or as a standalone extension.

  2. Configure VS Code to Use Black:

    • Open the Command Palette (Ctrl+Shift+P) and search for "Preferences: Settings".
    • Search for "Python Formatting Provider" and set it to black.
    • To format on save, search for "Format On Save" in the settings and ensure it is checked.
  3. Optional Configuration: Just like with the command line, you can create a pyproject.toml file to customize Black’s behavior if needed.

Choosing Between the Two
  • Command Line:

    • Suitable for batch processing or if you’re working in a non-IDE environment.
    • Provides flexibility and control, especially if you work in different editors or environments.
  • VS Code Extension:

    • Convenient for developers who prefer to stay within the VS Code environment.
    • Automatically formats code on save, which can streamline your workflow.

Ultimately, using the extension may be more convenient for daily coding tasks if you’re working primarily within VS Code, while the command line approach might be better for scripting or CI/CD pipelines. You can also use both methods in tandem, depending on your needs.