env-scanner


Nameenv-scanner JSON
Version 2.3.2 PyPI version JSON
download
home_pagehttps://github.com/ammarmunir4567/env-scanner
SummaryAutomatically scan Python projects for environment variables and generate .env-example files
upload_time2025-10-08 09:33:20
maintainerNone
docs_urlNone
authorAmmar Munir
requires_python>=3.7
licenseMIT
keywords python environment env dotenv configuration environment-variables scanner generator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Env Scanner

🔍 Automatically scan Python projects for environment variables and generate `.env-example` files.

[![Python](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Features

- 🔎 **Automatic Detection**: Scans your Python codebase to find all environment variable usage
- 🌐 **Framework Support**: Works with Django, Flask, FastAPI, Pydantic, and vanilla Python
- 📝 **Smart Generation**: Creates `.env-example` files with intelligent placeholders and comments
- 🎯 **Multiple Detection Methods**: Uses both AST parsing and regex for comprehensive coverage
- 📄 **Config File Scanning**: Also scans YAML, JSON, TOML, and INI files for env vars
- 🗂️ **Smart Grouping**: Organizes variables by common prefixes for better readability
- 💡 **Contextual Comments**: Adds helpful comments based on variable names and usage locations
- ⚡ **CLI Interface**: Easy-to-use command-line tool
- 🐍 **Pure Python**: No external dependencies required

## Installation

### From PyPI (when published)

```bash
pip install env-scanner
```

### From Source

```bash
git clone https://github.com/yourusername/env-scanner.git
cd env-scanner
pip install -e .
```

## Quick Start

### Command Line

The simplest way to use env-scanner:

```bash
# Scan current directory and generate .env-example
env-scanner

# Scan a specific project
env-scanner scan /path/to/your/project

# Just list variables without generating file
env-scanner list

# Preview before saving
env-scanner scan --preview
```

### Python API

```python
from env_scanner import EnvScanner, EnvExampleGenerator

# Create scanner
scanner = EnvScanner(project_path='/path/to/your/project')

# Scan for environment variables
env_vars = scanner.scan_directory()

# Print summary
scanner.print_summary()

# Generate .env-example file
generator = EnvExampleGenerator.from_scanner(scanner)
generator.save()
```

## Supported Frameworks & Patterns

Env Scanner works with **all major Python frameworks** and patterns. Here's what it detects:

### 🐍 Standard Python

```python
import os
from os import environ, getenv

# All these patterns are detected
DATABASE_URL = os.environ.get('DATABASE_URL')
API_KEY = os.environ['API_KEY']
SECRET_KEY = os.getenv('SECRET_KEY')
PORT = environ.get('PORT', '8000')
DEBUG = getenv('DEBUG', 'False')
```

### 🎯 Django

```python
# django-environ
import environ
env = environ.Env()

DATABASE_URL = env('DATABASE_URL')
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
SECRET_KEY = env.str('SECRET_KEY')

# python-decouple
from decouple import config
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
```

### 🌶️ Flask

```python
from flask import Flask
app = Flask(__name__)

# Flask config patterns
app.config['DATABASE_URL'] = os.environ.get('DATABASE_URL')
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')

# Or from current_app
from flask import current_app
db_url = current_app.config['DATABASE_URL']
```

### ⚡ FastAPI / Pydantic

```python
from pydantic import BaseSettings, Field
from pydantic_settings import BaseSettings  # Pydantic v2

class Settings(BaseSettings):
    # Auto-detected from field names
    database_url: str
    api_key: str
    
    # With explicit env names
    secret: str = Field(env='SECRET_KEY')
    port: int = Field(default=8000, env='PORT')
    
    class Config:
        env_file = '.env'

# Usage
settings = Settings()
```

### 📦 python-dotenv

```python
from dotenv import load_dotenv, dotenv_values

# Load variables
load_dotenv()

# Or get specific values
config = dotenv_values(".env")
DATABASE_URL = config.get('DATABASE_URL')
```

### 📄 Configuration Files

Env Scanner also scans configuration files for environment variable references:

**YAML files:**
```yaml
database:
  url: ${DATABASE_URL}
  password: ${DB_PASSWORD}
  
# Or Symfony-style
database:
  url: '%env(DATABASE_URL)%'
```

**JSON files:**
```json
{
  "database": "${DATABASE_URL}",
  "api_key": "${API_KEY}"
}
```

**TOML files:**
```toml
database_url = "${DATABASE_URL}"
api_key = "${API_KEY}"
```

### 🔍 Advanced Patterns

```python
# F-strings
message = f"Connecting to {os.environ['DATABASE_URL']}"

# String interpolation
config = f"postgresql://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}"

# Direct from environ
from os import environ
API_KEY = environ['API_KEY']
```

## CLI Usage

### Scan Command

Scan a project and generate `.env-example` file:

```bash
# Basic usage
env-scanner scan

# Specify project path
env-scanner scan /path/to/project

# Custom output location
env-scanner scan --output .env.template

# Exclude specific directories
env-scanner scan --exclude venv,build,dist,node_modules

# Preview before saving
env-scanner scan --preview

# Disable comments
env-scanner scan --no-comments

# Disable grouping by prefix
env-scanner scan --no-grouping
```

### List Command

List all environment variables found without generating a file:

```bash
# Basic list
env-scanner list

# Show file locations
env-scanner list --show-locations

# Specific project
env-scanner list /path/to/project
```

### CLI Options

```
Options:
  -h, --help            Show help message
  -v, --version         Show version
  --verbose             Enable verbose output
  
Scan/Generate Options:
  -o, --output PATH     Output path for .env-example file
  -e, --exclude DIRS    Comma-separated directories to exclude
  --no-generate         Only scan, don't generate file
  --no-comments         Don't add descriptive comments
  --no-grouping         Don't group variables by prefix
  --no-header           Don't add file header
  --preview             Preview before saving
  --regex-only          Use only regex (skip AST parsing)
  
List Options:
  -l, --show-locations  Show where variables are used
```

## Python API

### EnvScanner

The `EnvScanner` class scans Python files to detect environment variables:

```python
from env_scanner import EnvScanner

# Initialize scanner
scanner = EnvScanner(
    project_path='/path/to/project',
    exclude_dirs=['venv', 'build', 'dist'],  # Optional
)

# Scan the project
env_vars = scanner.scan_directory()

# Get detailed results
results = scanner.get_results()
print(results['variables'])  # List of variable names
print(results['count'])      # Number of variables
print(results['locations'])  # Dict of variable locations

# Print summary
scanner.print_summary()
```

### EnvExampleGenerator

The `EnvExampleGenerator` class creates `.env-example` files:

```python
from env_scanner import EnvExampleGenerator

# From a set of variable names
generator = EnvExampleGenerator(
    env_vars={'DATABASE_URL', 'API_KEY', 'SECRET_KEY'},
    output_path='.env-example',
    add_comments=True,
    group_by_prefix=True,
    include_header=True
)

# Generate and save
generator.save()

# Or preview first
generator.preview()

# Create from scanner
from env_scanner import EnvScanner

scanner = EnvScanner('.')
scanner.scan_directory()

generator = EnvExampleGenerator.from_scanner(
    scanner,
    output_path='.env-example'
)
generator.save()
```

## Example Output

For a project using these environment variables:

```python
DATABASE_URL = os.environ.get('DATABASE_URL')
DATABASE_NAME = os.getenv('DATABASE_NAME')
API_KEY = os.environ['API_KEY']
API_SECRET = os.environ.get('API_SECRET')
DEBUG = os.getenv('DEBUG', 'False')
PORT = os.environ.get('PORT', '8000')
```

Env Scanner generates this `.env-example` file:

```bash
# Environment Variables Configuration
# This file was automatically generated by env-scanner
# Generated on: 2025-10-01 12:00:00
#
# Copy this file to .env and fill in the actual values
# DO NOT commit .env file to version control

# API Configuration
#==================================================

# API key for external service
API_KEY=your_secret_key_here

# API secret for external service
API_SECRET=your_secret_key_here

# DATABASE Configuration
#==================================================

# Database configuration
DATABASE_NAME=your_database_name

# Database configuration
DATABASE_URL=https://example.com

# Other Configuration
#==================================================

# Debug mode (true/false)
DEBUG=false

# Port number
PORT=8000
```

## Configuration

### Excluding Directories

By default, these directories are excluded from scanning:

- `venv`, `env`, `.venv`, `.env`
- `node_modules`
- `__pycache__`, `.git`
- `dist`, `build`, `*.egg-info`
- `.tox`, `.pytest_cache`, `.mypy_cache`

Add custom exclusions:

```python
scanner = EnvScanner(
    project_path='.',
    exclude_dirs=['custom_dir', 'another_dir']
)
```

Or via CLI:

```bash
env-scanner scan --exclude venv,build,custom_dir
```

## Advanced Usage

### Custom Variable Detection

Add custom regex patterns for variable detection:

```python
scanner = EnvScanner(
    project_path='.',
    include_patterns=[
        r'config\.get\(["\']([A-Z_]+)["\']',  # Custom config pattern
    ]
)
```

### Programmatic Generation

```python
from env_scanner import EnvScanner, EnvExampleGenerator

# Scan project
scanner = EnvScanner('/path/to/project')
variables = scanner.scan_directory()

# Custom generation
generator = EnvExampleGenerator(
    env_vars=variables,
    output_path='custom-env-template.txt',
    add_comments=True,
    group_by_prefix=True
)

# Get content without saving
content = generator.generate_content()
print(content)

# Or save to file
generator.save()
```

## Development

### Setup Development Environment

```bash
# Clone the repository
git clone https://github.com/yourusername/env-scanner.git
cd env-scanner

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e ".[dev]"
```

### Run Tests

```bash
# Run all tests
pytest

# Run with coverage
pytest --cov=env_scanner --cov-report=html

# Run specific test file
pytest tests/test_scanner.py
```

### Code Quality

```bash
# Format code
black env_scanner tests

# Lint code
flake8 env_scanner tests

# Type checking
mypy env_scanner
```

## How It Works

1. **Scanning**: The scanner walks through your Python project files
2. **Detection**: Uses both AST (Abstract Syntax Tree) parsing and regex to find environment variable access patterns
3. **Analysis**: Identifies variable names and their usage locations
4. **Generation**: Creates a `.env-example` file with:
   - Intelligent placeholder values based on variable names
   - Descriptive comments for common patterns
   - Grouped organization by variable prefixes
   - Usage location context

## Use Cases

- 🚀 **Project Setup**: Help new developers understand required environment variables
- 📦 **CI/CD**: Automatically generate environment templates in deployment pipelines
- 📚 **Documentation**: Keep environment variable documentation in sync with code
- 🔒 **Security**: Ensure all required environment variables are documented without exposing secrets
- ♻️ **Refactoring**: Track environment variable usage across large codebases

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Support

- 📧 Email: your.email@example.com
- 🐛 Issues: [GitHub Issues](https://github.com/yourusername/env-scanner/issues)
- 💬 Discussions: [GitHub Discussions](https://github.com/yourusername/env-scanner/discussions)

## Acknowledgments

- Inspired by the need for better environment variable management in Python projects
- Built with Python's `ast` module for accurate code parsing
- Thanks to all contributors and users!

---

Made with ❤️ by Your Name
# env_scanner
# env_scanner

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ammarmunir4567/env-scanner",
    "name": "env-scanner",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "Ammar Munir <ammarmunir4567@gmail.com>",
    "keywords": "python, environment, env, dotenv, configuration, environment-variables, scanner, generator",
    "author": "Ammar Munir",
    "author_email": "Ammar Munir <ammarmunir4567@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e1/31/2b09255d3968dd859edd81814ed62bad1cb891b27338527c096170146bf7/env_scanner-2.3.2.tar.gz",
    "platform": null,
    "description": "# Env Scanner\n\n\ud83d\udd0d Automatically scan Python projects for environment variables and generate `.env-example` files.\n\n[![Python](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Features\n\n- \ud83d\udd0e **Automatic Detection**: Scans your Python codebase to find all environment variable usage\n- \ud83c\udf10 **Framework Support**: Works with Django, Flask, FastAPI, Pydantic, and vanilla Python\n- \ud83d\udcdd **Smart Generation**: Creates `.env-example` files with intelligent placeholders and comments\n- \ud83c\udfaf **Multiple Detection Methods**: Uses both AST parsing and regex for comprehensive coverage\n- \ud83d\udcc4 **Config File Scanning**: Also scans YAML, JSON, TOML, and INI files for env vars\n- \ud83d\uddc2\ufe0f **Smart Grouping**: Organizes variables by common prefixes for better readability\n- \ud83d\udca1 **Contextual Comments**: Adds helpful comments based on variable names and usage locations\n- \u26a1 **CLI Interface**: Easy-to-use command-line tool\n- \ud83d\udc0d **Pure Python**: No external dependencies required\n\n## Installation\n\n### From PyPI (when published)\n\n```bash\npip install env-scanner\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/yourusername/env-scanner.git\ncd env-scanner\npip install -e .\n```\n\n## Quick Start\n\n### Command Line\n\nThe simplest way to use env-scanner:\n\n```bash\n# Scan current directory and generate .env-example\nenv-scanner\n\n# Scan a specific project\nenv-scanner scan /path/to/your/project\n\n# Just list variables without generating file\nenv-scanner list\n\n# Preview before saving\nenv-scanner scan --preview\n```\n\n### Python API\n\n```python\nfrom env_scanner import EnvScanner, EnvExampleGenerator\n\n# Create scanner\nscanner = EnvScanner(project_path='/path/to/your/project')\n\n# Scan for environment variables\nenv_vars = scanner.scan_directory()\n\n# Print summary\nscanner.print_summary()\n\n# Generate .env-example file\ngenerator = EnvExampleGenerator.from_scanner(scanner)\ngenerator.save()\n```\n\n## Supported Frameworks & Patterns\n\nEnv Scanner works with **all major Python frameworks** and patterns. Here's what it detects:\n\n### \ud83d\udc0d Standard Python\n\n```python\nimport os\nfrom os import environ, getenv\n\n# All these patterns are detected\nDATABASE_URL = os.environ.get('DATABASE_URL')\nAPI_KEY = os.environ['API_KEY']\nSECRET_KEY = os.getenv('SECRET_KEY')\nPORT = environ.get('PORT', '8000')\nDEBUG = getenv('DEBUG', 'False')\n```\n\n### \ud83c\udfaf Django\n\n```python\n# django-environ\nimport environ\nenv = environ.Env()\n\nDATABASE_URL = env('DATABASE_URL')\nDEBUG = env.bool('DEBUG', default=False)\nALLOWED_HOSTS = env.list('ALLOWED_HOSTS')\nSECRET_KEY = env.str('SECRET_KEY')\n\n# python-decouple\nfrom decouple import config\nSECRET_KEY = config('SECRET_KEY')\nDEBUG = config('DEBUG', default=False, cast=bool)\n```\n\n### \ud83c\udf36\ufe0f Flask\n\n```python\nfrom flask import Flask\napp = Flask(__name__)\n\n# Flask config patterns\napp.config['DATABASE_URL'] = os.environ.get('DATABASE_URL')\napp.config['SECRET_KEY'] = os.getenv('SECRET_KEY')\n\n# Or from current_app\nfrom flask import current_app\ndb_url = current_app.config['DATABASE_URL']\n```\n\n### \u26a1 FastAPI / Pydantic\n\n```python\nfrom pydantic import BaseSettings, Field\nfrom pydantic_settings import BaseSettings  # Pydantic v2\n\nclass Settings(BaseSettings):\n    # Auto-detected from field names\n    database_url: str\n    api_key: str\n    \n    # With explicit env names\n    secret: str = Field(env='SECRET_KEY')\n    port: int = Field(default=8000, env='PORT')\n    \n    class Config:\n        env_file = '.env'\n\n# Usage\nsettings = Settings()\n```\n\n### \ud83d\udce6 python-dotenv\n\n```python\nfrom dotenv import load_dotenv, dotenv_values\n\n# Load variables\nload_dotenv()\n\n# Or get specific values\nconfig = dotenv_values(\".env\")\nDATABASE_URL = config.get('DATABASE_URL')\n```\n\n### \ud83d\udcc4 Configuration Files\n\nEnv Scanner also scans configuration files for environment variable references:\n\n**YAML files:**\n```yaml\ndatabase:\n  url: ${DATABASE_URL}\n  password: ${DB_PASSWORD}\n  \n# Or Symfony-style\ndatabase:\n  url: '%env(DATABASE_URL)%'\n```\n\n**JSON files:**\n```json\n{\n  \"database\": \"${DATABASE_URL}\",\n  \"api_key\": \"${API_KEY}\"\n}\n```\n\n**TOML files:**\n```toml\ndatabase_url = \"${DATABASE_URL}\"\napi_key = \"${API_KEY}\"\n```\n\n### \ud83d\udd0d Advanced Patterns\n\n```python\n# F-strings\nmessage = f\"Connecting to {os.environ['DATABASE_URL']}\"\n\n# String interpolation\nconfig = f\"postgresql://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}\"\n\n# Direct from environ\nfrom os import environ\nAPI_KEY = environ['API_KEY']\n```\n\n## CLI Usage\n\n### Scan Command\n\nScan a project and generate `.env-example` file:\n\n```bash\n# Basic usage\nenv-scanner scan\n\n# Specify project path\nenv-scanner scan /path/to/project\n\n# Custom output location\nenv-scanner scan --output .env.template\n\n# Exclude specific directories\nenv-scanner scan --exclude venv,build,dist,node_modules\n\n# Preview before saving\nenv-scanner scan --preview\n\n# Disable comments\nenv-scanner scan --no-comments\n\n# Disable grouping by prefix\nenv-scanner scan --no-grouping\n```\n\n### List Command\n\nList all environment variables found without generating a file:\n\n```bash\n# Basic list\nenv-scanner list\n\n# Show file locations\nenv-scanner list --show-locations\n\n# Specific project\nenv-scanner list /path/to/project\n```\n\n### CLI Options\n\n```\nOptions:\n  -h, --help            Show help message\n  -v, --version         Show version\n  --verbose             Enable verbose output\n  \nScan/Generate Options:\n  -o, --output PATH     Output path for .env-example file\n  -e, --exclude DIRS    Comma-separated directories to exclude\n  --no-generate         Only scan, don't generate file\n  --no-comments         Don't add descriptive comments\n  --no-grouping         Don't group variables by prefix\n  --no-header           Don't add file header\n  --preview             Preview before saving\n  --regex-only          Use only regex (skip AST parsing)\n  \nList Options:\n  -l, --show-locations  Show where variables are used\n```\n\n## Python API\n\n### EnvScanner\n\nThe `EnvScanner` class scans Python files to detect environment variables:\n\n```python\nfrom env_scanner import EnvScanner\n\n# Initialize scanner\nscanner = EnvScanner(\n    project_path='/path/to/project',\n    exclude_dirs=['venv', 'build', 'dist'],  # Optional\n)\n\n# Scan the project\nenv_vars = scanner.scan_directory()\n\n# Get detailed results\nresults = scanner.get_results()\nprint(results['variables'])  # List of variable names\nprint(results['count'])      # Number of variables\nprint(results['locations'])  # Dict of variable locations\n\n# Print summary\nscanner.print_summary()\n```\n\n### EnvExampleGenerator\n\nThe `EnvExampleGenerator` class creates `.env-example` files:\n\n```python\nfrom env_scanner import EnvExampleGenerator\n\n# From a set of variable names\ngenerator = EnvExampleGenerator(\n    env_vars={'DATABASE_URL', 'API_KEY', 'SECRET_KEY'},\n    output_path='.env-example',\n    add_comments=True,\n    group_by_prefix=True,\n    include_header=True\n)\n\n# Generate and save\ngenerator.save()\n\n# Or preview first\ngenerator.preview()\n\n# Create from scanner\nfrom env_scanner import EnvScanner\n\nscanner = EnvScanner('.')\nscanner.scan_directory()\n\ngenerator = EnvExampleGenerator.from_scanner(\n    scanner,\n    output_path='.env-example'\n)\ngenerator.save()\n```\n\n## Example Output\n\nFor a project using these environment variables:\n\n```python\nDATABASE_URL = os.environ.get('DATABASE_URL')\nDATABASE_NAME = os.getenv('DATABASE_NAME')\nAPI_KEY = os.environ['API_KEY']\nAPI_SECRET = os.environ.get('API_SECRET')\nDEBUG = os.getenv('DEBUG', 'False')\nPORT = os.environ.get('PORT', '8000')\n```\n\nEnv Scanner generates this `.env-example` file:\n\n```bash\n# Environment Variables Configuration\n# This file was automatically generated by env-scanner\n# Generated on: 2025-10-01 12:00:00\n#\n# Copy this file to .env and fill in the actual values\n# DO NOT commit .env file to version control\n\n# API Configuration\n#==================================================\n\n# API key for external service\nAPI_KEY=your_secret_key_here\n\n# API secret for external service\nAPI_SECRET=your_secret_key_here\n\n# DATABASE Configuration\n#==================================================\n\n# Database configuration\nDATABASE_NAME=your_database_name\n\n# Database configuration\nDATABASE_URL=https://example.com\n\n# Other Configuration\n#==================================================\n\n# Debug mode (true/false)\nDEBUG=false\n\n# Port number\nPORT=8000\n```\n\n## Configuration\n\n### Excluding Directories\n\nBy default, these directories are excluded from scanning:\n\n- `venv`, `env`, `.venv`, `.env`\n- `node_modules`\n- `__pycache__`, `.git`\n- `dist`, `build`, `*.egg-info`\n- `.tox`, `.pytest_cache`, `.mypy_cache`\n\nAdd custom exclusions:\n\n```python\nscanner = EnvScanner(\n    project_path='.',\n    exclude_dirs=['custom_dir', 'another_dir']\n)\n```\n\nOr via CLI:\n\n```bash\nenv-scanner scan --exclude venv,build,custom_dir\n```\n\n## Advanced Usage\n\n### Custom Variable Detection\n\nAdd custom regex patterns for variable detection:\n\n```python\nscanner = EnvScanner(\n    project_path='.',\n    include_patterns=[\n        r'config\\.get\\([\"\\']([A-Z_]+)[\"\\']',  # Custom config pattern\n    ]\n)\n```\n\n### Programmatic Generation\n\n```python\nfrom env_scanner import EnvScanner, EnvExampleGenerator\n\n# Scan project\nscanner = EnvScanner('/path/to/project')\nvariables = scanner.scan_directory()\n\n# Custom generation\ngenerator = EnvExampleGenerator(\n    env_vars=variables,\n    output_path='custom-env-template.txt',\n    add_comments=True,\n    group_by_prefix=True\n)\n\n# Get content without saving\ncontent = generator.generate_content()\nprint(content)\n\n# Or save to file\ngenerator.save()\n```\n\n## Development\n\n### Setup Development Environment\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/env-scanner.git\ncd env-scanner\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n\n# Install in development mode\npip install -e \".[dev]\"\n```\n\n### Run Tests\n\n```bash\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=env_scanner --cov-report=html\n\n# Run specific test file\npytest tests/test_scanner.py\n```\n\n### Code Quality\n\n```bash\n# Format code\nblack env_scanner tests\n\n# Lint code\nflake8 env_scanner tests\n\n# Type checking\nmypy env_scanner\n```\n\n## How It Works\n\n1. **Scanning**: The scanner walks through your Python project files\n2. **Detection**: Uses both AST (Abstract Syntax Tree) parsing and regex to find environment variable access patterns\n3. **Analysis**: Identifies variable names and their usage locations\n4. **Generation**: Creates a `.env-example` file with:\n   - Intelligent placeholder values based on variable names\n   - Descriptive comments for common patterns\n   - Grouped organization by variable prefixes\n   - Usage location context\n\n## Use Cases\n\n- \ud83d\ude80 **Project Setup**: Help new developers understand required environment variables\n- \ud83d\udce6 **CI/CD**: Automatically generate environment templates in deployment pipelines\n- \ud83d\udcda **Documentation**: Keep environment variable documentation in sync with code\n- \ud83d\udd12 **Security**: Ensure all required environment variables are documented without exposing secrets\n- \u267b\ufe0f **Refactoring**: Track environment variable usage across large codebases\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- \ud83d\udce7 Email: your.email@example.com\n- \ud83d\udc1b Issues: [GitHub Issues](https://github.com/yourusername/env-scanner/issues)\n- \ud83d\udcac Discussions: [GitHub Discussions](https://github.com/yourusername/env-scanner/discussions)\n\n## Acknowledgments\n\n- Inspired by the need for better environment variable management in Python projects\n- Built with Python's `ast` module for accurate code parsing\n- Thanks to all contributors and users!\n\n---\n\nMade with \u2764\ufe0f by Your Name\n# env_scanner\n# env_scanner\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Automatically scan Python projects for environment variables and generate .env-example files",
    "version": "2.3.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/ammarmunir4567/env_scanner/issues",
        "Changelog": "https://github.com/ammarmunir4567/env_scanner/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/ammarmunir4567/env_scanner#readme",
        "Homepage": "https://github.com/ammarmunir4567/env_scanner",
        "Repository": "https://github.com/ammarmunir4567/env_scanner.git"
    },
    "split_keywords": [
        "python",
        " environment",
        " env",
        " dotenv",
        " configuration",
        " environment-variables",
        " scanner",
        " generator"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "93db5ccf62fdf066ca97a183856abf9a567b38dafce6494c15ef9b50d9d15e16",
                "md5": "68eb869a9537fcbbb56e1f32844b5194",
                "sha256": "467814629911d7a58f5da25c4996d6c17d7c7df2a94c4816114ed7dbb3f95d9a"
            },
            "downloads": -1,
            "filename": "env_scanner-2.3.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "68eb869a9537fcbbb56e1f32844b5194",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 18332,
            "upload_time": "2025-10-08T09:33:18",
            "upload_time_iso_8601": "2025-10-08T09:33:18.857469Z",
            "url": "https://files.pythonhosted.org/packages/93/db/5ccf62fdf066ca97a183856abf9a567b38dafce6494c15ef9b50d9d15e16/env_scanner-2.3.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1312b09255d3968dd859edd81814ed62bad1cb891b27338527c096170146bf7",
                "md5": "38f7c0056e1c037f580c816f2cf6fae3",
                "sha256": "55e181435f99b18e37b44ba0c0ae5161125ae1caf646eba230ec9138f4b24119"
            },
            "downloads": -1,
            "filename": "env_scanner-2.3.2.tar.gz",
            "has_sig": false,
            "md5_digest": "38f7c0056e1c037f580c816f2cf6fae3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 40772,
            "upload_time": "2025-10-08T09:33:20",
            "upload_time_iso_8601": "2025-10-08T09:33:20.580513Z",
            "url": "https://files.pythonhosted.org/packages/e1/31/2b09255d3968dd859edd81814ed62bad1cb891b27338527c096170146bf7/env_scanner-2.3.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-08 09:33:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ammarmunir4567",
    "github_project": "env-scanner",
    "github_not_found": true,
    "lcname": "env-scanner"
}
        
Elapsed time: 4.47301s