Skip to main content

GitHub License PyPI version Downloads Static Badge Python versions codecov GitHub last commit CI CodeQL

Flake8 Import Guard is a Flake8 plugin that helps enforce import restrictions in your Python projects. It allows you to specify forbidden imports and detects their usage in your codebase, focusing on newly added imports in version-controlled files.

Features

  • 🚫 Detects forbidden imports in new and modified files
  • 🔧 Configurable via .flake8 or pyproject.toml
  • 🔍 Focuses on newly added imports in Git-versioned files
  • 🔗 Seamless integration with existing Flake8 workflows

Motivation

Flake8 Import Guard is designed to address several common challenges in Python development.

  • Enforcing Security Measures

    • Prevent the use of potentially unsafe or deprecated modules, enhancing the overall security of your codebase.
    • Prevent the import of forbidden external libraries, maintaining better control over your project's external dependencies.
  • Guardrail for AI-Powered Development

    • As AI coding assistants become more common, they may introduce unintended or forbidden libraries. This plugin acts as a safety guardrail, automatically blocking prohibited imports in AI-generated code. This ensures that all code, whether written by humans or AI, adheres to your project's security, licensing, and architectural standards.
  • Dependency Management

    • Restrict and control project dependencies, reducing complexity and potential conflicts.
  • License Compliance

    • Ensure compliance with licensing requirements by preventing the use of libraries with incompatible licenses.
  • Performance Optimization

    • Avoid the use of heavyweight or inefficient imports that could impact performance.
  • Coding Standards Enforcement

    • Maintain consistent coding standards across your project by enforcing specific import patterns.
  • Gradual Deprecation of Legacy Code

    • Facilitate the phasing out of old modules or deprecated imports as your project evolves.

By using Flake8 Import Guard, development teams can proactively manage their codebase, ensuring better quality, security, and maintainability of their Python projects.

Installation

You can install Flake8 Import Guard using pip.

pip install flake8-import-guard

Usage

Once installed, Flake8 Import Guard will automatically be used by Flake8. You can run it using the standard Flake8 command.

flake8 path/to/your/code

Recommended Integration

It is highly recommended to integrate Flake8 Import Guard into your pre-commit hooks and CI workflows. This ensures that import restrictions are enforced consistently across your development process, catching potential violations early and maintaining code quality standards.

Configuration

You can configure Flake8 Import Guard using Flake8's standard configuration system or through pyproject.toml.

For example, let's say you want to prohibit the use of load_dotenv and subprocess in your project. Here's how you would configure that.

Using Flake8 Configuration

Add the following to your .flake8 file.

[flake8]
forbidden_imports = load_dotenv,subprocess

Using pyproject.toml

Add the following to your pyproject.toml file.

[tool.flake8-import-guard]
forbidden_imports = [
    "load_dotenv",
    "subprocess"
]

Example

Configuration

Let's say you have the following configuration in your .flake8 file.

[flake8]
forbidden_imports = load_dotenv,subprocess

Sample Python File

Consider the following Python file.

# test_file.py
import os
from datetime import datetime

from subprocess import check_output  # Violation Module

from dotenv import load_dotenv       # Violation Module

def main():
    pass

if __name__ == "__main__":
    main()

Execution and Result

When you run Flake8 on this file, you'll get the following output.

$ flake8 test_file.py
test_file.py:4:1: CPE001 Forbidden import found: subprocess.check_output
test_file.py:6:1: CPE001 Forbidden import found: dotenv.load_dotenv

How It Works

flake8-import-guard uses Git to detect changes in your codebase and enforce import restrictions. Here's a detailed explanation of its operation.

  1. For new files

    • It checks all imports against the forbidden list.
    • Any import found in the forbidden list is reported as a violation.
  2. For existing files

    • It compares the current version with the last committed version to identify newly added imports.
    • Only newly added imports that match the forbidden list are reported as violations.

[!IMPORTANT] If a forbidden import already exists in the file at the time of introducing flake8-import-guard, it will not be detected as a violation. The plugin focuses only on new changes to prevent disruption to existing codebases.

  1. Violation reporting
    • Only newly added imports that match the forbidden list are reported as violations.
    • This approach allows for gradual implementation of import restrictions without causing immediate breaks in existing code.

This behavior ensures that introducing flake8-import-guard to an existing project doesn't immediately flag all existing forbidden imports, allowing for a smoother integration and gradual code improvement.

Capabilities and Limitations

What It Can Do

  • Detect newly added forbidden imports in both new and existing files
  • Work with Git-versioned projects
  • Configure forbidden imports through Flake8 config or pyproject.toml
  • Integrate seamlessly with existing Flake8 workflows

What It Cannot Do

  • Work in non-Git environments
  • Identify removed or modified imports (focus is on new additions only)
  • Detect indirect imports (e.g., imports within imported modules)

Error Codes

  • CPE001: Forbidden import found

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. See CONTRIBUTING.md to get an idea of how contributions work.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for flake8-import-guard 1.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flake8-import-guard 1.3.4
File Size Uploaded
flake8_import_guard-1.3.4.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flake8-import-guard 1.3.4
File Interpreter ABI Platform
flake8_import_guard-1.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 15.9 kB

Release files / flake8_import_guard-1.3.4.tar.gz

Download URL flake8_import_guard-1.3.4.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f8ad5ab7a9fc67ebe7a891188d2c60725cd5a4c9385fd1ed246b00098c88bd81
BLAKE2b-256 checksum
How to use checksums
67c3a174eb68b751a1f4f7f2ea39d4fa50fc609469dcdacaf6f4cbe481503b98
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2025.

Transparency log

Release files / flake8_import_guard-1.3.4-py3-none-any.whl

Download URL flake8_import_guard-1.3.4-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8ff7906a5ced257a29e0bc768978e36f5e94af7f73fc59c4d53d65d8afb02ce0
BLAKE2b-256 checksum
How to use checksums
0e959866c5440b41e43ab93f7e15cee0d0d62c18d85be010e4ae751465062208
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.4 This release

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.0.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page