OpenDroneMap-WebODM/app/plugins/pyutils.py

38 wiersze
1.4 KiB
Python

import os
import re
import subprocess
import hashlib
def parse_requirements(requirements_file):
"""
Parse a requirements.txt file
:param requirements_file: path to requirements.txt file
:return: package names
"""
if os.path.exists(requirements_file):
with open(requirements_file, 'r') as f:
deps = list(filter(lambda x: len(x) > 0, map(str.strip, f.read().split('\n'))))
return [re.split('==|<=|>=|<|>', d)[0] for d in deps]
return []
def requirements_installed(requirements_file, python_path):
"""
Checks if the packages in requirements.txt have been installed in the specified
python path. Note that this does NOT check for versions, just package names
:param requirements_file: path to requirements.txt
:param python_path: path to directory where packages are installed
:return: True if all requirements are installed, false otherwise
"""
env = os.environ.copy()
env["PYTHONPATH"] = env.get("PYTHONPATH", "") + ":" + python_path
reqs = subprocess.check_output(['python', '-m', 'pip', 'freeze'], env=env)
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
deps = parse_requirements(requirements_file)
return set(deps) & set(installed_packages) == set(deps)
def compute_file_md5(filename):
return hashlib.md5(open(filename, 'rb').read()).hexdigest()