Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/python3
- """
- Small utility to upgrade all packages in a requirements.txt file in the current directory to the latest version as determined by a CLI call to `pip show {package}`.
- """
- import sys
- import re
- import subprocess
- filename = 'requirements.txt'
- try:
- requirement_file = open(filename, 'r')
- except:
- print(f"No '{filename}' found here.")
- sys.exit(1)
- requirements = dict()
- for line in requirement_file.readlines():
- parts = line.split("==")
- requirements[parts[0].strip()] = parts[
- 1].strip() if len(parts) > 1 else None
- requirements_fixed = dict()
- print("Collecting newest pip package versions...")
- for package, version in requirements.items():
- process = subprocess.Popen(
- ["pip", "show", package],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=sys.stderr)
- output = str(process.stdout.read())
- pattern = r'Name: (.*)\\nVersion: ([0-9a-zA-Z.]+)'
- groups = re.search(pattern, output).groups()
- requirements_fixed[groups[0]] = groups[1]
- print(f"{groups[0]}=={groups[1]}")
- assert len(requirements) == len(requirements_fixed)
- handle = open(filename, 'w')
- handle.writelines([f"{p}=={v}\n" for p, v in requirements_fixed.items()])
- print(f"Updated {len(requirements_fixed)} packages in {filename}")
Add Comment
Please, Sign In to add comment