This commit is contained in:
ahmadbilalkhalid 2019-09-12 13:22:07 +05:00
parent b6da0e3c93
commit fdfcf36e4e

View file

@ -1,60 +1,60 @@
import subprocess as sp import subprocess as sp
import subprocess as sp # import subprocess as sp
import requests # import requests
import json import json
import os import os
from decouple import config # from decouple import config
# def install_available(pipfile): # def install_available(pipfile):
""" Install Python packages or their dependencies mentioned in # """ Install Python packages or their dependencies mentioned in
pipfile if they are available in System repos # pipfile if they are available in System repos
""" # """
def is_available_in_system_repos(package): # def is_available_in_system_repos(package):
try: # try:
sp.check_output(['apk', 'info', f'py3-{package}']) # sp.check_output(['apk', 'info', f'py3-{package}'])
except: # except:
return False # return False
else: # else:
return True # return True
if get_distro_name() == "alpine": # if get_distro_name() == "alpine":
dependencies = [] # dependencies = []
need_to_be_installed = [] # need_to_be_installed = []
try: # try:
with open(pipfile) as f: # with open(pipfile) as f:
lines = f.readlines() # lines = f.readlines()
try: # try:
start_index = lines.index("[packages]\n") # start_index = lines.index("[packages]\n")
end_index = lines.index("\n", start_index) # end_index = lines.index("\n", start_index)
for package in lines[start_index: end_index]: # for package in lines[start_index: end_index]:
if '= "*"' in package: # if '= "*"' in package:
package = package[:package.index(" =")] # package = package[:package.index(" =")]
if is_available_in_system_repos(package): # if is_available_in_system_repos(package):
need_to_be_installed.append(f"py3-{package}") # need_to_be_installed.append(f"py3-{package}")
else: # else:
dependencies.append(package) # dependencies.append(package)
except ValueError: # except ValueError:
print("Not Found") # print("Not Found")
except: # except:
return # return
else: # else:
for dependency in dependencies: # for dependency in dependencies:
content = requests.get(f"https://libraries.io/api/pypi/{dependency}/latest/dependencies?api_key={config('LIBRARIES_IO_API')}") # content = requests.get(f"https://libraries.io/api/pypi/{dependency}/latest/dependencies?api_key={config('LIBRARIES_IO_API')}")
content = json.loads(content.content.decode("utf-8")) # content = json.loads(content.content.decode("utf-8"))
for subdependency in content["dependencies"]: # for subdependency in content["dependencies"]:
subdependency = subdependency["name"] # subdependency = subdependency["name"]
if is_available_in_system_repos(subdependency): # if is_available_in_system_repos(subdependency):
need_to_be_installed.append(f"py3-{subdependency}") # need_to_be_installed.append(f"py3-{subdependency}")
for package in need_to_be_installed: # for package in need_to_be_installed:
try: # try:
sp.check_output(["apk", "add", package]) # sp.check_output(["apk", "add", package])
except: # except:
print(f"Could not install {package}") # print(f"Could not install {package}")
def install_available(project_path): def install_available(project_path):
if get_distro_name() == "alpine": if get_distro_name() == "alpine":