Skip to content

Add --no-lock flag to 'pipenv requirements' command#6496

Merged
matteius merged 1 commit intomainfrom
feature/requirements-no-lock-5482
Dec 10, 2025
Merged

Add --no-lock flag to 'pipenv requirements' command#6496
matteius merged 1 commit intomainfrom
feature/requirements-no-lock-5482

Conversation

@matteius
Copy link
Copy Markdown
Member

Summary

Adds a new --no-lock flag to the pipenv requirements command that generates requirements using version specifiers from the Pipfile instead of locked versions from Pipfile.lock.

Motivation

This addresses issue #5482 where users requested the ability to generate requirements.txt with flexible version constraints suitable for Python libraries.

Python libraries typically need looser version constraints (like >=1.0, *) in their install_requires rather than strictly pinned versions (like ==1.2.3) that come from the lockfile. Strictly pinned dependencies can cause conflicts when the library is installed alongside other packages.

Usage

# Generate requirements with Pipfile version specifiers
pipenv requirements --no-lock

# Include dev dependencies
pipenv requirements --no-lock --dev

# Specific categories
pipenv requirements --no-lock --categories="packages,extras"

Examples

Given a Pipfile:

[packages]
requests = ">=2.0"
flask = "*"
django = "~=4.0"

With --no-lock:

requests>=2.0
flask
django~=4.0

Without --no-lock (current behavior):

requests==2.32.3
flask==3.0.0
django==4.2.7

Implementation Details

  • The --no-lock flag implies --from-pipfile since only direct dependencies make sense without the lockfile
  • Supports all Pipfile dependency types: simple versions, VCS, paths, editable installs
  • Preserves extras (e.g., package[extra1,extra2])
  • Preserves markers (e.g., sys_platform == 'win32')
  • Hashes are not supported with --no-lock (they require locked versions)

Files Changed

  • pipenv/cli/command.py - Added --no-lock option
  • pipenv/routines/requirements.py - Added Pipfile-based generation logic
  • pipenv/utils/requirements.py - Added requirements_from_pipfile() function

Fixes #5482


Pull Request opened by Augment Code with guidance from the PR author

Adds a new --no-lock flag that generates requirements using version
specifiers from the Pipfile instead of locked versions from Pipfile.lock.

This is useful for Python libraries that need flexible version constraints
(like '>=1.0', '*') rather than strictly pinned versions (like '==1.2.3')
for their install_requires.

Examples:
  # Pipfile has: requests = ">=2.0"
  pipenv requirements --no-lock
  # Output: requests>=2.0

  # Pipfile has: flask = "*"
  pipenv requirements --no-lock
  # Output: flask

The --no-lock flag implies --from-pipfile since only direct dependencies
make sense without the lockfile.

Fixes #5482
@matteius matteius merged commit b37b584 into main Dec 10, 2025
19 of 20 checks passed
@matteius matteius deleted the feature/requirements-no-lock-5482 branch December 10, 2025 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Generate requirements.txt from Pipfile rather than Pipfile.lock

1 participant