Skip to content

Instantly share code, notes, and snippets.

@adlerweb
Created August 20, 2023 18:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adlerweb/7b0d1b407725a81e773ff9236f04afc6 to your computer and use it in GitHub Desktop.
Save adlerweb/7b0d1b407725a81e773ff9236f04afc6 to your computer and use it in GitHub Desktop.
pip upgrade helper

When updating a venv to a newer python version you need to reinstall all locally install pip packages. This script can be pointed at the previous versions site-packages directory and output a string containing all previously installed packages, suitable to pass to pip install.

(Search-foo: Might help if you are running HomeAssistant inside a venv and, after upgrading python, integrations are not loaded)

import os
def extract_metadata(file_path):
metadata = {}
with open(file_path, 'r') as metadata_file:
for line in metadata_file:
if ': ' in line:
try:
key, value = line.strip().split(': ', 1)
metadata[key] = value
except:
pass
return metadata
def main(root_folder):
result = []
for folder, _, _ in os.walk(root_folder):
if folder.endswith('.dist-info'):
metadata_file_path = os.path.join(folder, 'METADATA')
if os.path.exists(metadata_file_path):
metadata = extract_metadata(metadata_file_path)
name = metadata.get('Name')
version = metadata.get('Version')
if name and version:
result.append(f"{name}=={version}")
space_separated_result = ' '.join(result)
print(space_separated_result)
if __name__ == '__main__':
root_folder = '/tmp/venv/lib/python3.10/site-packages'
main(root_folder)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment