# Pipup
**Update Python Package versions in requirements.txt with exact versions from pip freeze**
[](https://badge.fury.io/py/requp)
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
A command-line tool that updates existing packages in requirements.txt with their exact versions from pip freeze, without adding new packages. Perfect for keeping your requirements.txt files up-to-date with your current environment.
## ✨ Features
- ✅ **Safe Updates**: Only updates existing packages, never adds new ones
- ✅ **Preserves Formatting**: Maintains package order, comments, and empty lines
- ✅ **Smart Version Handling**: Supports all version specifiers (>=, <, ~, etc.)
- ✅ **Package Extras**: Correctly handles packages with extras (e.g., `Flask[async]`)
- ✅ **Dry Run Mode**: Preview changes before applying them
- ✅ **Enhanced Dry Run**: Shows complete updated requirements.txt content
- ✅ **Error Handling**: Warns about packages not found in pip freeze
- ✅ **Cross-Platform**: Works on macOS, Linux, and Windows
## 🚀 Installation
### Homebrew (macOS) - Recommended
```bash
brew install abozaralizadeh/brew/pipup
```
### PyPI
```bash
pip install requp
```
**Note**: After installation, you can use either `pipup` or `requp` commands - they work identically!
### From Source
```bash
git clone https://github.com/abozaralizadeh/pipup.git
cd pipup
pip install -e .
```
### Direct Installation
```bash
pip install git+https://github.com/abozaralizadeh/pipup.git
```
## 📖 Usage
### Basic Usage
```bash
pipup # Update requirements.txt (default)
# or
requp # Update requirements.txt (default)
```
**Note**: All commands use `requirements.txt` as the default file when no filename is specified.
### Dry Run (Preview Changes)
```bash
pipup --dry-run # Preview changes to requirements.txt
# or
requp --dry-run # Preview changes to requirements.txt
```
### Upgrade to Latest Versions
```bash
pipup -U # Update to latest versions from PyPI
pipup -U --dry-run # Preview latest version updates
pipup requirements-dev.txt -U # Update specific file to latest
# or use requp instead of pipup
```
### Update Different Requirements Files
```bash
pipup requirements-dev.txt # Update specific file
pipup requirements-prod.txt # Update specific file
pipup requirements-test.txt # Update specific file
# or use requp instead of pipup
```
### Package Management Commands
```bash
pipup remove --all # Remove all packages except pipup
pipup remove # Remove packages from requirements.txt (default)
pipup remove requirements.txt # Remove packages from specific file
pipup free # Remove version constraints from requirements.txt (default)
pipup free requirements.txt # Remove version constraints from specific file
# or use requp instead of pipup
```
### Get Help
```bash
pipup --help
pipup --version
# or
requp --help
requp --version
```
## 🎛️ Skip Conventions
Pipup supports special comment conventions to control which packages get updated:
### Skip Single Package
```txt
# This package should not be updated
#skip-pipup
requests==2.31.0
# Or use the requp alias
#skip-requp
Flask>=2.0.0
```
### Skip All Remaining Packages
```txt
# Everything below this line should be ignored
#stop-pipup
pydantic==1.10.15
azure-storage-blob==12.19.1
# This comment will also be preserved
```
### Supported Conventions
- `#skip-pipup` or `#skip-requp` - Skip the next package line
- `#stop-pipup` or `#stop-requp` - Skip all remaining lines
## 🔄 Upgrade Mode
The `-U` or `--upgrade` flag updates packages to their latest versions from PyPI instead of using the versions from `pip freeze`. This is useful when you want to:
- **Update to latest**: Get the newest versions of all packages
- **Stay current**: Keep your dependencies up-to-date
- **Test compatibility**: Check if your code works with latest versions
**Note**: Skip and stop conventions work the same way in upgrade mode, giving you fine-grained control over which packages get updated.
## 🗑️ Package Management Commands
Pipup now includes powerful package management commands for cleaning up your virtual environment:
### Remove All Packages
```bash
pipup remove --all
```
Removes all packages from the virtual environment except pipup itself. This is useful for:
- **Clean slate**: Starting fresh with a clean environment
- **Environment reset**: Removing all dependencies before reinstalling
- **Testing**: Ensuring clean test environments
### Remove Specific Packages
```bash
pipup remove # Remove packages from requirements.txt (default)
pipup remove requirements-dev.txt # Remove packages from specific file
pipup remove requirements-prod.txt # Remove packages from specific file
```
Removes only the packages listed in the specified requirements file. This is useful for:
- **Selective cleanup**: Remove only specific project dependencies
- **Environment isolation**: Clean up project-specific packages
- **Dependency management**: Remove packages from specific requirement files
### Free Version Constraints
```bash
pipup free # Remove version constraints from requirements.txt (default)
pipup free requirements-dev.txt # Remove version constraints from specific file
pipup free requirements-prod.txt # Remove version constraints from specific file
```
Removes all version constraints from the requirements file, keeping only package names. This is useful for:
- **Flexible versions**: Allow pip to choose compatible versions
- **Development**: Remove strict version pinning during development
- **Compatibility testing**: Test with different version combinations
**Examples:**
```txt
# Before
requests==2.28.1
numpy>=1.21.0
pandas[dev]==1.5.0
flask>=2.0.0,<3.0.0
# After pipup free
requests
numpy
pandas[dev]
flask
```
## 📋 Examples
### Before Running Pipup
```txt
requests
Flask>=2.0.0
langchain
pydantic>=1.0.0,<2.0.0
# This is a comment
azure-storage-blob
Flask[async]
duckduckgo-search
```
### After Running Pipup
```txt
requests==2.32.4
Flask==3.1.1
langchain==0.3.27
pydantic==2.11.7
# This is a comment
azure-storage-blob==12.26.0
Flask[async]==3.1.1
duckduckgo-search
```
### Dry Run Output
```bash
$ pipup --dry-run
Running pip freeze...
Found 246 installed packages
Dry run: Updating test_requirements.txt...
Warning: flask not found in pip freeze, keeping original specification
Warning: duckduckgo-search not found in pip freeze, keeping original specification
Dry run: Would update 4 packages
Packages not found in pip freeze: flask, duckduckgo-search
Updated requirements.txt content:
--------------------------------------------------
requests==2.31.0
Flask>=2.0.0
langchain==0.0.329
pydantic==1.10.15
# This is a comment
azure-storage-blob==12.19.1
Flask[async]
duckduckgo-search
--------------------------------------------------
```
## 🔧 How It Works
1. **Runs pip freeze** to get all installed packages with exact versions
2. **Parses requirements.txt** line by line, preserving formatting and comments
3. **Matches packages** by name (case-insensitive) and handles extras
4. **Updates version specifiers** to exact versions (==) from pip freeze
5. **Preserves everything else** (comments, empty lines, package order, warnings)
## 📦 Supported Version Specifiers
Pipup handles all standard pip version specifiers:
| Specifier | Example | Result |
|-----------|---------|--------|
| No version | `requests` | `requests==2.32.4` |
| Exact version | `requests==1.0.0` | `requests==2.32.4` |
| Minimum version | `requests>=1.0.0` | `requests==2.32.4` |
| Maximum version | `requests<3.0.0` | `requests==2.32.4` |
| Version range | `requests>=1.0.0,<3.0.0` | `requests==2.32.4` |
| Compatible release | `requests~=1.0.0` | `requests==2.32.4` |
| Exclusion | `requests!=1.0.0` | `requests==2.32.4` |
## 🎯 Package Extras Support
Pipup correctly handles packages with extras:
```txt
# Before
Flask[async]
requests[security]
django[postgresql]
# After
Flask[async]==3.1.1
requests[security]==2.32.4
django[postgresql]==4.2.7
```
## ⚠️ Error Handling
- **Missing requirements.txt**: Exits with clear error message
- **Package not found**: Warns and keeps original specification
- **pip not found**: Exits with helpful error message
- **Invalid requirements.txt**: Preserves malformed lines as-is
- **Permission errors**: Clear error messages for file access issues
## 🛠️ Development
### Setup Development Environment
```bash
git clone https://github.com/abozaralizadeh/pipup.git
cd pipup
pip install -e .
```
### Running Tests
```bash
python -m pytest tests/
```
### Building Package
```bash
python -m build
```
## 📝 Changelog
### 1.2.1
- **New Commands**: Added `remove` and `free` subcommands for package management
- **Remove All**: `pipup remove --all` removes all packages except pipup itself
- **Remove Specific**: `pipup remove [file]` removes packages from requirements file
- **Free Constraints**: `pipup free [file]` removes version constraints from requirements file
- **Cross-Platform**: All new commands work on Windows, macOS, and Linux
- **Backward Compatible**: All existing functionality preserved
- **Enhanced CLI**: Improved command-line interface with subcommands
### 1.1.1
- **Upgrade Mode**: Added `-U`/`--upgrade` flag to update to latest PyPI versions
- **PyPI Integration**: Get latest package versions directly from PyPI
- **Skip Conventions**: Skip and stop conventions work with upgrade mode
- **Enhanced Control**: Fine-grained control over which packages get updated
### 1.1.0
- **Homebrew Migration**: Changed from `abozaralizadeh/tap/pipup` to `abozaralizadeh/brew/pipup`
- **Better Naming**: More standard Homebrew tap naming convention
- **Improved Documentation**: Updated all installation instructions
### 1.0.9
- **Default File**: Added default value for requirements.txt file
- **Simplified Usage**: Can now run `pipup` or `requp` without specifying file
- **Skip Conventions**: Added `#skip-pipup`/`#skip-requp` and `#stop-pipup`/`#stop-requp` comments
- **Fine-grained Control**: Users can now skip individual packages or all remaining packages
- **Better UX**: More intuitive for common use case
- **Updated Documentation**: Examples now show default behavior and skip conventions
### 1.0.8
- **GitHub Permissions**: Fixed GitHub Actions release permissions
- **Release Attachments**: Added built packages to GitHub releases
### 1.0.7
- **Better Permissions**: Added explicit contents: write permissions
- **Improved Workflow**: Enhanced CI/CD pipeline reliability
### 1.0.6
- **CI/CD Fixes**: Fixed GitHub Actions build and upload process
- **Build Verification**: Added steps to verify dist/ contents before upload
- **Clean Builds**: Ensures fresh builds without cached files
- **Better Debugging**: Added logging to track build process
### 1.0.5
- **Workflow Fixes**: Fixed GitHub Actions release workflow permissions
- **Modern Actions**: Updated to use `softprops/action-gh-release@v1`
- **Auto Changelog**: Added automatic release notes generation
- **Better Reliability**: Improved CI/CD pipeline stability
### 1.0.3
- **Command Alias**: Added `requp` as an alias command for PyPI users
- **Dual Commands**: Users can now use either `pipup` or `requp` commands
- **Enhanced Documentation**: Updated README with comprehensive examples and badges
- **Improved Workflow**: Fixed GitHub Actions release workflow
- **Better User Experience**: More intuitive for users installing from PyPI
### 1.0.2
- **PyPI Package Name**: Changed to `requp` to avoid naming conflicts
- **Enhanced Dry Run**: Now shows complete updated requirements.txt content
- **Improved Documentation**: Better examples and clearer instructions
- **Homebrew Support**: Added Homebrew installation via repository
### 1.0.1
- **Enhanced Dry Run**: Added display of updated requirements.txt content
- **Better Error Messages**: Improved warning and error output
- **Documentation Updates**: Added comprehensive examples
### 1.0.0
- **Initial Release**: Basic package version updating
- **Dry Run Mode**: Preview changes before applying
- **Version Specifier Support**: All standard pip version specifiers
- **Package Extras Support**: Handles packages with extras correctly
- **Cross-Platform**: Works on macOS, Linux, and Windows
## 🤝 Contributing
We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests if applicable
5. Commit your changes (`git commit -m 'Add amazing feature'`)
6. Push to the branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## 🙏 Acknowledgments
- Inspired by the need for safe requirements.txt updates
- Built with Python's excellent packaging tools
- Thanks to all contributors and users
## 📞 Support
- **Issues**: [GitHub Issues](https://github.com/abozaralizadeh/pipup/issues)
- **Discussions**: [GitHub Discussions](https://github.com/abozaralizadeh/pipup/
---
**Made with ❤️ for the Python community**
Raw data
{
"_id": null,
"home_page": "https://github.com/abozaralizadeh/pipup",
"name": "requp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "pip requirements version management python packaging",
"author": "Abozar Alizadeh",
"author_email": "abozar@example.com",
"download_url": "https://files.pythonhosted.org/packages/6b/2b/a32b2873e6e7bbe4a07122f649ba3455bfe9bcde23c199ec22bc8815b6e6/requp-1.2.1.tar.gz",
"platform": null,
"description": "# Pipup\n\n**Update Python Package versions in requirements.txt with exact versions from pip freeze**\n\n[](https://badge.fury.io/py/requp)\n[](https://opensource.org/licenses/MIT)\n[](https://www.python.org/downloads/)\n\nA command-line tool that updates existing packages in requirements.txt with their exact versions from pip freeze, without adding new packages. Perfect for keeping your requirements.txt files up-to-date with your current environment.\n\n## \u2728 Features\n\n- \u2705 **Safe Updates**: Only updates existing packages, never adds new ones\n- \u2705 **Preserves Formatting**: Maintains package order, comments, and empty lines\n- \u2705 **Smart Version Handling**: Supports all version specifiers (>=, <, ~, etc.)\n- \u2705 **Package Extras**: Correctly handles packages with extras (e.g., `Flask[async]`)\n- \u2705 **Dry Run Mode**: Preview changes before applying them\n- \u2705 **Enhanced Dry Run**: Shows complete updated requirements.txt content\n- \u2705 **Error Handling**: Warns about packages not found in pip freeze\n- \u2705 **Cross-Platform**: Works on macOS, Linux, and Windows\n\n## \ud83d\ude80 Installation\n\n### Homebrew (macOS) - Recommended\n```bash\nbrew install abozaralizadeh/brew/pipup\n```\n\n### PyPI\n```bash\npip install requp\n```\n\n**Note**: After installation, you can use either `pipup` or `requp` commands - they work identically!\n\n### From Source\n```bash\ngit clone https://github.com/abozaralizadeh/pipup.git\ncd pipup\npip install -e .\n```\n\n### Direct Installation\n```bash\npip install git+https://github.com/abozaralizadeh/pipup.git\n```\n\n## \ud83d\udcd6 Usage\n\n### Basic Usage\n```bash\npipup # Update requirements.txt (default)\n# or\nrequp # Update requirements.txt (default)\n```\n\n**Note**: All commands use `requirements.txt` as the default file when no filename is specified.\n\n### Dry Run (Preview Changes)\n```bash\npipup --dry-run # Preview changes to requirements.txt\n# or\nrequp --dry-run # Preview changes to requirements.txt\n```\n\n### Upgrade to Latest Versions\n```bash\npipup -U # Update to latest versions from PyPI\npipup -U --dry-run # Preview latest version updates\npipup requirements-dev.txt -U # Update specific file to latest\n# or use requp instead of pipup\n```\n\n### Update Different Requirements Files\n```bash\npipup requirements-dev.txt # Update specific file\npipup requirements-prod.txt # Update specific file\npipup requirements-test.txt # Update specific file\n# or use requp instead of pipup\n```\n\n### Package Management Commands\n```bash\npipup remove --all # Remove all packages except pipup\npipup remove # Remove packages from requirements.txt (default)\npipup remove requirements.txt # Remove packages from specific file\npipup free # Remove version constraints from requirements.txt (default)\npipup free requirements.txt # Remove version constraints from specific file\n# or use requp instead of pipup\n```\n\n### Get Help\n```bash\npipup --help\npipup --version\n# or\nrequp --help\nrequp --version\n```\n\n## \ud83c\udf9b\ufe0f Skip Conventions\n\nPipup supports special comment conventions to control which packages get updated:\n\n### Skip Single Package\n```txt\n# This package should not be updated\n#skip-pipup\nrequests==2.31.0\n\n# Or use the requp alias\n#skip-requp\nFlask>=2.0.0\n```\n\n### Skip All Remaining Packages\n```txt\n# Everything below this line should be ignored\n#stop-pipup\npydantic==1.10.15\nazure-storage-blob==12.19.1\n# This comment will also be preserved\n```\n\n### Supported Conventions\n- `#skip-pipup` or `#skip-requp` - Skip the next package line\n- `#stop-pipup` or `#stop-requp` - Skip all remaining lines\n\n## \ud83d\udd04 Upgrade Mode\n\nThe `-U` or `--upgrade` flag updates packages to their latest versions from PyPI instead of using the versions from `pip freeze`. This is useful when you want to:\n\n- **Update to latest**: Get the newest versions of all packages\n- **Stay current**: Keep your dependencies up-to-date\n- **Test compatibility**: Check if your code works with latest versions\n\n**Note**: Skip and stop conventions work the same way in upgrade mode, giving you fine-grained control over which packages get updated.\n\n## \ud83d\uddd1\ufe0f Package Management Commands\n\nPipup now includes powerful package management commands for cleaning up your virtual environment:\n\n### Remove All Packages\n```bash\npipup remove --all\n```\nRemoves all packages from the virtual environment except pipup itself. This is useful for:\n- **Clean slate**: Starting fresh with a clean environment\n- **Environment reset**: Removing all dependencies before reinstalling\n- **Testing**: Ensuring clean test environments\n\n### Remove Specific Packages\n```bash\npipup remove # Remove packages from requirements.txt (default)\npipup remove requirements-dev.txt # Remove packages from specific file\npipup remove requirements-prod.txt # Remove packages from specific file\n```\nRemoves only the packages listed in the specified requirements file. This is useful for:\n- **Selective cleanup**: Remove only specific project dependencies\n- **Environment isolation**: Clean up project-specific packages\n- **Dependency management**: Remove packages from specific requirement files\n\n### Free Version Constraints\n```bash\npipup free # Remove version constraints from requirements.txt (default)\npipup free requirements-dev.txt # Remove version constraints from specific file\npipup free requirements-prod.txt # Remove version constraints from specific file\n```\nRemoves all version constraints from the requirements file, keeping only package names. This is useful for:\n- **Flexible versions**: Allow pip to choose compatible versions\n- **Development**: Remove strict version pinning during development\n- **Compatibility testing**: Test with different version combinations\n\n**Examples:**\n```txt\n# Before\nrequests==2.28.1\nnumpy>=1.21.0\npandas[dev]==1.5.0\nflask>=2.0.0,<3.0.0\n\n# After pipup free\nrequests\nnumpy\npandas[dev]\nflask\n```\n\n## \ud83d\udccb Examples\n\n### Before Running Pipup\n```txt\nrequests\nFlask>=2.0.0\nlangchain\npydantic>=1.0.0,<2.0.0\n# This is a comment\nazure-storage-blob\nFlask[async]\nduckduckgo-search\n```\n\n### After Running Pipup\n```txt\nrequests==2.32.4\nFlask==3.1.1\nlangchain==0.3.27\npydantic==2.11.7\n# This is a comment\nazure-storage-blob==12.26.0\nFlask[async]==3.1.1\nduckduckgo-search\n```\n\n### Dry Run Output\n```bash\n$ pipup --dry-run\nRunning pip freeze...\nFound 246 installed packages\nDry run: Updating test_requirements.txt...\nWarning: flask not found in pip freeze, keeping original specification\nWarning: duckduckgo-search not found in pip freeze, keeping original specification\n\nDry run: Would update 4 packages\nPackages not found in pip freeze: flask, duckduckgo-search\n\nUpdated requirements.txt content:\n--------------------------------------------------\nrequests==2.31.0\nFlask>=2.0.0\nlangchain==0.0.329\npydantic==1.10.15\n# This is a comment\nazure-storage-blob==12.19.1\nFlask[async]\nduckduckgo-search\n--------------------------------------------------\n```\n\n## \ud83d\udd27 How It Works\n\n1. **Runs pip freeze** to get all installed packages with exact versions\n2. **Parses requirements.txt** line by line, preserving formatting and comments\n3. **Matches packages** by name (case-insensitive) and handles extras\n4. **Updates version specifiers** to exact versions (==) from pip freeze\n5. **Preserves everything else** (comments, empty lines, package order, warnings)\n\n## \ud83d\udce6 Supported Version Specifiers\n\nPipup handles all standard pip version specifiers:\n\n| Specifier | Example | Result |\n|-----------|---------|--------|\n| No version | `requests` | `requests==2.32.4` |\n| Exact version | `requests==1.0.0` | `requests==2.32.4` |\n| Minimum version | `requests>=1.0.0` | `requests==2.32.4` |\n| Maximum version | `requests<3.0.0` | `requests==2.32.4` |\n| Version range | `requests>=1.0.0,<3.0.0` | `requests==2.32.4` |\n| Compatible release | `requests~=1.0.0` | `requests==2.32.4` |\n| Exclusion | `requests!=1.0.0` | `requests==2.32.4` |\n\n## \ud83c\udfaf Package Extras Support\n\nPipup correctly handles packages with extras:\n\n```txt\n# Before\nFlask[async]\nrequests[security]\ndjango[postgresql]\n\n# After\nFlask[async]==3.1.1\nrequests[security]==2.32.4\ndjango[postgresql]==4.2.7\n```\n\n## \u26a0\ufe0f Error Handling\n\n- **Missing requirements.txt**: Exits with clear error message\n- **Package not found**: Warns and keeps original specification\n- **pip not found**: Exits with helpful error message\n- **Invalid requirements.txt**: Preserves malformed lines as-is\n- **Permission errors**: Clear error messages for file access issues\n\n## \ud83d\udee0\ufe0f Development\n\n### Setup Development Environment\n```bash\ngit clone https://github.com/abozaralizadeh/pipup.git\ncd pipup\npip install -e .\n```\n\n### Running Tests\n```bash\npython -m pytest tests/\n```\n\n### Building Package\n```bash\npython -m build\n```\n\n## \ud83d\udcdd Changelog\n\n### 1.2.1\n- **New Commands**: Added `remove` and `free` subcommands for package management\n- **Remove All**: `pipup remove --all` removes all packages except pipup itself\n- **Remove Specific**: `pipup remove [file]` removes packages from requirements file\n- **Free Constraints**: `pipup free [file]` removes version constraints from requirements file\n- **Cross-Platform**: All new commands work on Windows, macOS, and Linux\n- **Backward Compatible**: All existing functionality preserved\n- **Enhanced CLI**: Improved command-line interface with subcommands\n\n### 1.1.1\n- **Upgrade Mode**: Added `-U`/`--upgrade` flag to update to latest PyPI versions\n- **PyPI Integration**: Get latest package versions directly from PyPI\n- **Skip Conventions**: Skip and stop conventions work with upgrade mode\n- **Enhanced Control**: Fine-grained control over which packages get updated\n\n### 1.1.0\n- **Homebrew Migration**: Changed from `abozaralizadeh/tap/pipup` to `abozaralizadeh/brew/pipup`\n- **Better Naming**: More standard Homebrew tap naming convention\n- **Improved Documentation**: Updated all installation instructions\n\n### 1.0.9\n- **Default File**: Added default value for requirements.txt file\n- **Simplified Usage**: Can now run `pipup` or `requp` without specifying file\n- **Skip Conventions**: Added `#skip-pipup`/`#skip-requp` and `#stop-pipup`/`#stop-requp` comments\n- **Fine-grained Control**: Users can now skip individual packages or all remaining packages\n- **Better UX**: More intuitive for common use case\n- **Updated Documentation**: Examples now show default behavior and skip conventions\n\n### 1.0.8\n- **GitHub Permissions**: Fixed GitHub Actions release permissions\n- **Release Attachments**: Added built packages to GitHub releases\n\n### 1.0.7\n- **Better Permissions**: Added explicit contents: write permissions\n- **Improved Workflow**: Enhanced CI/CD pipeline reliability\n\n### 1.0.6\n- **CI/CD Fixes**: Fixed GitHub Actions build and upload process\n- **Build Verification**: Added steps to verify dist/ contents before upload\n- **Clean Builds**: Ensures fresh builds without cached files\n- **Better Debugging**: Added logging to track build process\n\n### 1.0.5\n- **Workflow Fixes**: Fixed GitHub Actions release workflow permissions\n- **Modern Actions**: Updated to use `softprops/action-gh-release@v1`\n- **Auto Changelog**: Added automatic release notes generation\n- **Better Reliability**: Improved CI/CD pipeline stability\n\n### 1.0.3\n- **Command Alias**: Added `requp` as an alias command for PyPI users\n- **Dual Commands**: Users can now use either `pipup` or `requp` commands\n- **Enhanced Documentation**: Updated README with comprehensive examples and badges\n- **Improved Workflow**: Fixed GitHub Actions release workflow\n- **Better User Experience**: More intuitive for users installing from PyPI\n\n### 1.0.2\n- **PyPI Package Name**: Changed to `requp` to avoid naming conflicts\n- **Enhanced Dry Run**: Now shows complete updated requirements.txt content\n- **Improved Documentation**: Better examples and clearer instructions\n- **Homebrew Support**: Added Homebrew installation via repository\n\n### 1.0.1\n- **Enhanced Dry Run**: Added display of updated requirements.txt content\n- **Better Error Messages**: Improved warning and error output\n- **Documentation Updates**: Added comprehensive examples\n\n### 1.0.0\n- **Initial Release**: Basic package version updating\n- **Dry Run Mode**: Preview changes before applying\n- **Version Specifier Support**: All standard pip version specifiers\n- **Package Extras Support**: Handles packages with extras correctly\n- **Cross-Platform**: Works on macOS, Linux, and Windows\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests if applicable\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Inspired by the need for safe requirements.txt updates\n- Built with Python's excellent packaging tools\n- Thanks to all contributors and users\n\n## \ud83d\udcde Support\n\n- **Issues**: [GitHub Issues](https://github.com/abozaralizadeh/pipup/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/abozaralizadeh/pipup/\n\n---\n\n**Made with \u2764\ufe0f for the Python community**\n",
"bugtrack_url": null,
"license": null,
"summary": "Update Python package versions in requirements.txt with exact versions from pip freeze",
"version": "1.2.1",
"project_urls": {
"Bug Reports": "https://github.com/abozaralizadeh/pipup/issues",
"Homepage": "https://github.com/abozaralizadeh/pipup",
"Source": "https://github.com/abozaralizadeh/pipup"
},
"split_keywords": [
"pip",
"requirements",
"version",
"management",
"python",
"packaging"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "6593ca3626d60ea9549b0d2ee08f4afe779df5f8a0182ec3c39148b12017dd40",
"md5": "0117eeb3df14f11f088abeb8219ded00",
"sha256": "cdf5d760ac5217279cdc32407a0512dd15c53c308ce407988fb32b38137366f7"
},
"downloads": -1,
"filename": "requp-1.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0117eeb3df14f11f088abeb8219ded00",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 11376,
"upload_time": "2025-10-09T20:46:45",
"upload_time_iso_8601": "2025-10-09T20:46:45.549935Z",
"url": "https://files.pythonhosted.org/packages/65/93/ca3626d60ea9549b0d2ee08f4afe779df5f8a0182ec3c39148b12017dd40/requp-1.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6b2ba32b2873e6e7bbe4a07122f649ba3455bfe9bcde23c199ec22bc8815b6e6",
"md5": "531009fefaa4bc1ee29b18e33ea0b2ab",
"sha256": "32bbd854fdb2f059acfcba18c728e73f72e36b48c94aeb2899320aae5889f624"
},
"downloads": -1,
"filename": "requp-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "531009fefaa4bc1ee29b18e33ea0b2ab",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 15160,
"upload_time": "2025-10-09T20:46:46",
"upload_time_iso_8601": "2025-10-09T20:46:46.507388Z",
"url": "https://files.pythonhosted.org/packages/6b/2b/a32b2873e6e7bbe4a07122f649ba3455bfe9bcde23c199ec22bc8815b6e6/requp-1.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-09 20:46:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "abozaralizadeh",
"github_project": "pipup",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "requp"
}