Main Ecosystems
HomePython CorePandas ReferenceNumPy ScientificFastAPI & PydanticDjango Enterprise
More Ecosystems
Environment & SetupRequests & HTTPAsyncIO ConcurrencyObject-Oriented OOPPyTorch Deep LearningScikit-Learn MLFlask FrameworkWeb ScrapingDatabase & ORMDevOps & Docker

PermissionError: [Errno 13] Permission denied in Python

Verified FixPython 3.10+Python NativeSilo: environment

Quick Fix / Solution Rapide

This error occurs when writing to a protected directory or when a file is locked. Use virtual environments, pip install --user, or check file ownership.

Root Cause Analysis

This error occurs when Python tries to perform a filesystem operation (such as creating, writing, or deleting a file or directory), but the operating system denies the request because the process lacks sufficient user permissions or the file is locked.

Cause 1: Global Pip Installations in Protected System Directories

Running pip install <package> outside a virtual environment attempts to write into /usr/local/lib or C:\Program Files, which requires root or administrator privileges, raising PermissionError: [Errno 13] Permission denied.

Cause 2: Writing to Files Currently Open in Another Application

On Windows, opening a file (such as an Excel spreadsheet data.xlsx) locks it against write access from other processes. Attempting to overwrite it in Python triggers PermissionError.

Cause 3: Attempting to Read/Write Directories as if They Were Files

Calling open('my_directory', 'r') on a directory path raises PermissionError: [Errno 13] Permission denied on Linux/macOS (or [Errno 21] IsADirectoryError).

Reproduction Code (MCVE)

Example: Bug Reproduction
import os
# Simulate permission denied error
raise PermissionError(13, 'Permission denied: /usr/local/lib/python/site-packages')

Solution 1: Use Project Virtual Environments (venv)

Create an isolated virtual environment inside your user workspace with python -m venv .venv. Virtual environments require zero administrative privileges.

Example: Recommended Solution
import tempfile
from pathlib import Path

# User-accessible workspace directory
user_workspace = Path(tempfile.gettempdir()) / 'pythonfix_env'
user_workspace.mkdir(parents=True, exist_ok=True)

test_file = user_workspace / 'workspace_data.txt'
test_file.write_text('Data written with user-level permissions', encoding='utf-8')
print(f'File written cleanly to: {test_file}')

Solution 2: Use the --user Flag with Pip

If installing packages without a virtual environment, pass python -m pip install --user <package_name> to install into your user profile directory.

Example: Alternative Solution
import sys
print('pip install --user strategy confirmed for non-root environments.')

Common Mistakes & Edge Cases

1. Never Use sudo pip install

Running sudo pip install overwrites operating system Python packages managed by apt or dnf, frequently corrupting system utilities like gnome-terminal or cloud init scripts. Always use virtual environments.

2. File Locking on Windows

Always use context managers (with open(...) as f:) so file descriptors close immediately upon block exit, preventing lingering file locks.

3. Contrasting PermissionError vs FileNotFoundError

  • PermissionError: File or folder exists, but access rights are insufficient.
  • FileNotFoundError: Path does not exist in the filesystem.

4. Note de Reproductibilité Environnementale

Le comportement des commandes système et des résolutions de paquets dépend fortement de votre système d'exploitation (Windows, macOS, Linux), de l'architecture processeur (x86_64 vs ARM64) et de la configuration des permissions locales. Adaptez les chemins et les permissions selon votre environnement d'exécution spécifique.