Fix data file path detection with new pip
Using an editable installation of Kayobe fails on Rocky Linux 9 or Ubuntu with an error such as: ERROR! The requirements file '/home/rocky/kayobe/kayobe/requirements.yml' does not exist. Failed to install Ansible roles from /home/rocky/kayobe/kayobe/utils.py/../requirements.yml via Ansible Galaxy: returncode 1 Control host bootstrap failed - likely Ansible Galaxy flakiness. Sleeping 5 seconds before retrying This is caused by recent changes to how pip manages editable installations. The egg-link file that Kayobe was using to find the source path does not exist anymore. Instead, there is a direct_url.json file under the kayobe dist-info directory that can be parsed. Change-Id: I9dd5b97dec93c0e5393a1e7d9640f85003651b56 Closes-Bug: #2020135
This commit is contained in:
parent
3089774cf3
commit
1847ad3f17
@ -16,6 +16,8 @@ import base64
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
import glob
|
import glob
|
||||||
import graphlib
|
import graphlib
|
||||||
|
import importlib_metadata
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@ -50,10 +52,30 @@ def _detect_install_prefix(path):
|
|||||||
return prefix_path
|
return prefix_path
|
||||||
|
|
||||||
|
|
||||||
|
def _get_direct_url(dist):
|
||||||
|
direct_url = os.path.join(dist._path, 'direct_url.json')
|
||||||
|
if os.path.exists(direct_url):
|
||||||
|
with open(direct_url, 'r') as f:
|
||||||
|
direct_url_content = json.loads(f.readline().strip())
|
||||||
|
url = direct_url_content['url']
|
||||||
|
prefix = 'file://'
|
||||||
|
if url.startswith(prefix):
|
||||||
|
return url[len(prefix):]
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def _get_base_path():
|
def _get_base_path():
|
||||||
override = os.environ.get("KAYOBE_DATA_FILES_PATH")
|
override = os.environ.get("KAYOBE_DATA_FILES_PATH")
|
||||||
if override:
|
if override:
|
||||||
return os.path.join(override)
|
return os.path.join(override)
|
||||||
|
|
||||||
|
kayobe_dist = list(importlib_metadata.Distribution.discover(name="kayobe"))
|
||||||
|
if kayobe_dist:
|
||||||
|
direct_url = _get_direct_url(kayobe_dist[0])
|
||||||
|
if direct_url:
|
||||||
|
return direct_url
|
||||||
|
|
||||||
egg_glob = os.path.join(
|
egg_glob = os.path.join(
|
||||||
sys.prefix, 'lib*', 'python*', '*-packages', 'kayobe.egg-link'
|
sys.prefix, 'lib*', 'python*', '*-packages', 'kayobe.egg-link'
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes detection of data file path when using editable installations with a
|
||||||
|
recent pip.
|
Loading…
Reference in New Issue
Block a user