[+] integrate uv pip compile
This commit is contained in:
parent
ebbd1a2b5b
commit
528d9b1ce5
@ -3891,20 +3891,15 @@ def pip_resolve(args: list[str]) -> None:
|
||||
options, argv = parser.parse_known_args(args)
|
||||
|
||||
from online.fxreader.pr34.commands_typed.pip import pip_resolve
|
||||
sys.stdout.write('\n'.join([
|
||||
'#%s\n%s %s' % (
|
||||
o.url,
|
||||
o.constraint,
|
||||
' '.join([
|
||||
'--hash=sha256:%s' % o2
|
||||
for o2 in o.sha256
|
||||
])
|
||||
)
|
||||
for o in pip_resolve(
|
||||
|
||||
resolve_res = pip_resolve(
|
||||
argv,
|
||||
mode=options.mode,
|
||||
)
|
||||
]))
|
||||
|
||||
assert not resolve_res.txt is None
|
||||
|
||||
sys.stdout.write(resolve_res.txt)
|
||||
sys.stdout.flush()
|
||||
|
||||
def commands_cli(
|
||||
|
@ -14,7 +14,9 @@ import pip._internal.operations.prepare
|
||||
import unittest.mock
|
||||
import logging
|
||||
|
||||
from typing import (Literal,)
|
||||
from typing import (
|
||||
Literal,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -28,7 +30,14 @@ def pip_show(
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class pip_resolve_t:
|
||||
class kwargs_t:
|
||||
class mode_t(enum.StrEnum):
|
||||
copy_paste = "copy_paste"
|
||||
monkey_patch = "monkey_patch"
|
||||
uv_pip_compile = "uv_pip_compile"
|
||||
|
||||
class res_t:
|
||||
@dataclasses.dataclass
|
||||
class download_info_t:
|
||||
@ -36,25 +45,37 @@ class pip_resolve_t:
|
||||
sha256: str
|
||||
constraint: str
|
||||
|
||||
txt: Optional[str] = None
|
||||
entries: Optional[list[download_info_t]] = None
|
||||
|
||||
|
||||
def pip_resolve_entries_to_txt(
|
||||
entries: list[pip_resolve_t.res_t.download_info_t]
|
||||
) -> str:
|
||||
return '\n'.join([
|
||||
'#%s\n%s %s' % (
|
||||
o.url,
|
||||
o.constraint,
|
||||
' '.join([
|
||||
'--hash=sha256:%s' % o2
|
||||
for o2 in o.sha256
|
||||
])
|
||||
)
|
||||
for o in entries
|
||||
])
|
||||
|
||||
def pip_resolve(
|
||||
argv: list[str],
|
||||
mode: Literal['copy_paste', 'monkey_patch'],
|
||||
) -> list[
|
||||
pip_resolve_t.res_t.download_info_t
|
||||
]:
|
||||
if mode == 'copy_paste':
|
||||
mode: pip_resolve_t.kwargs_t.mode_t,
|
||||
) -> list[pip_resolve_t.res_t.download_info_t]:
|
||||
if mode is pip_resolve_t.kwargs_t.mode_t.copy_paste:
|
||||
with contextlib.ExitStack() as stack:
|
||||
stack.enter_context(
|
||||
pip._internal.utils.temp_dir.global_tempdir_manager()
|
||||
)
|
||||
stack.enter_context(pip._internal.utils.temp_dir.global_tempdir_manager())
|
||||
|
||||
t2 = pip._internal.cli.main_parser.create_main_parser()
|
||||
|
||||
t3 = t2.parse_args(['download'])
|
||||
t1 = pip._internal.commands.download.DownloadCommand(
|
||||
'blah',
|
||||
'shit'
|
||||
)
|
||||
t3 = t2.parse_args(["download"])
|
||||
t1 = pip._internal.commands.download.DownloadCommand("blah", "shit")
|
||||
|
||||
stack.enter_context(t1.main_context())
|
||||
|
||||
@ -94,16 +115,21 @@ def pip_resolve(
|
||||
target_python=target_python,
|
||||
ignore_requires_python=options.ignore_requires_python,
|
||||
)
|
||||
build_tracker = t1.enter_context(pip._internal.commands.download.get_build_tracker())
|
||||
reqs = t1.get_requirements([
|
||||
build_tracker = t1.enter_context(
|
||||
pip._internal.commands.download.get_build_tracker()
|
||||
)
|
||||
reqs = t1.get_requirements(
|
||||
[
|
||||
#'pip', 'uv', 'ipython',
|
||||
*argv,
|
||||
], options, finder, session)
|
||||
],
|
||||
options,
|
||||
finder,
|
||||
session,
|
||||
)
|
||||
pip._internal.commands.download.check_legacy_setup_py_options(options, reqs)
|
||||
directory = pip._internal.commands.download.TempDirectory(
|
||||
delete=True,
|
||||
kind='download',
|
||||
globally_managed=True
|
||||
delete=True, kind="download", globally_managed=True
|
||||
)
|
||||
preparer = t1.make_requirement_preparer(
|
||||
temp_build_dir=directory,
|
||||
@ -126,50 +152,59 @@ def pip_resolve(
|
||||
t1.trace_basic_info(finder)
|
||||
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
|
||||
|
||||
return [
|
||||
res = pip_resolve_t.res_t(
|
||||
entries=[
|
||||
pip_resolve_t.res_t.download_info_t(
|
||||
constraint=k,
|
||||
sha256=v.download_info.info.hashes['sha256'],
|
||||
sha256=v.download_info.info.hashes["sha256"],
|
||||
url=v.download_info.url,
|
||||
)
|
||||
for k, v in requirement_set.requirements.items()
|
||||
]
|
||||
elif mode == 'monkey_patch':
|
||||
],
|
||||
)
|
||||
res.txt = pip_resolve_entries_to_txt(
|
||||
res.entries
|
||||
)
|
||||
|
||||
return res
|
||||
elif mode is pip_resolve_t.kwargs_t.mode_t.monkey_patch:
|
||||
downloader_call_def = pip._internal.network.download.Downloader.__call__
|
||||
|
||||
def downloader_call(*args):
|
||||
logger.info(dict(
|
||||
logger.info(
|
||||
dict(
|
||||
url=args[1].url,
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
return downloader_call_def(*args)
|
||||
|
||||
batch_downloader_call_def = pip._internal.network.download.BatchDownloader.__call__
|
||||
batch_downloader_call_def = (
|
||||
pip._internal.network.download.BatchDownloader.__call__
|
||||
)
|
||||
|
||||
def batch_downloader_call(*args):
|
||||
# print(args)
|
||||
|
||||
logger.info(dict(
|
||||
logger.info(
|
||||
dict(
|
||||
args=args,
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
return [
|
||||
(o, ('/dev/null', None))
|
||||
for o in args[1]
|
||||
]
|
||||
return [(o, ("/dev/null", None)) for o in args[1]]
|
||||
|
||||
# base_resolver_resolve_def = pip._internal.resolution.base.BaseResolver.resolve
|
||||
base_resolver_resolve_def = pip._internal.resolution.resolvelib.resolver.Resolver.resolve
|
||||
base_resolver_resolve_def = (
|
||||
pip._internal.resolution.resolvelib.resolver.Resolver.resolve
|
||||
)
|
||||
|
||||
result_requirements = []
|
||||
|
||||
def base_resolver_resolve(*args, **kwargs):
|
||||
# print(args, kwargs)
|
||||
|
||||
res = base_resolver_resolve_def(
|
||||
*args,
|
||||
**kwargs
|
||||
)
|
||||
res = base_resolver_resolve_def(*args, **kwargs)
|
||||
|
||||
result_requirements.append(res)
|
||||
raise NotImplementedError
|
||||
@ -178,51 +213,37 @@ def pip_resolve(
|
||||
get_http_url_def = pip._internal.operations.prepare.get_http_url
|
||||
|
||||
def get_http_url(link, download, download_dir=None, hashes=None):
|
||||
|
||||
logger.info(dict(
|
||||
logger.info(
|
||||
dict(
|
||||
url=link.url,
|
||||
hashes=hashes,
|
||||
))
|
||||
|
||||
if link.url.endswith('.whl'):
|
||||
print('blah')
|
||||
hashes = None
|
||||
|
||||
return '/dev/null', None
|
||||
else:
|
||||
return get_http_url_def(
|
||||
link,
|
||||
download,
|
||||
download_dir,
|
||||
hashes
|
||||
)
|
||||
)
|
||||
|
||||
prepare_linked_requirements_more_def = \
|
||||
pip._internal.operations.prepare.RequirementPreparer\
|
||||
.prepare_linked_requirements_more
|
||||
if link.url.endswith(".whl"):
|
||||
print("blah")
|
||||
hashes = None
|
||||
|
||||
def prepare_linked_requirements_more(
|
||||
_self, reqs, *args, **kwargs
|
||||
):
|
||||
return "/dev/null", None
|
||||
else:
|
||||
return get_http_url_def(link, download, download_dir, hashes)
|
||||
|
||||
prepare_linked_requirements_more_def = pip._internal.operations.prepare.RequirementPreparer.prepare_linked_requirements_more
|
||||
|
||||
def prepare_linked_requirements_more(_self, reqs, *args, **kwargs):
|
||||
result_requirements.append(reqs)
|
||||
raise NotImplementedError
|
||||
|
||||
_complete_partial_requirements_def = \
|
||||
pip._internal.operations.prepare.RequirementPreparer\
|
||||
._complete_partial_requirements
|
||||
_complete_partial_requirements_def = pip._internal.operations.prepare.RequirementPreparer._complete_partial_requirements
|
||||
|
||||
def _complete_partial_requirements(
|
||||
_self, reqs, *args, **kwargs
|
||||
):
|
||||
def _complete_partial_requirements(_self, reqs, *args, **kwargs):
|
||||
result_requirements.append(reqs)
|
||||
raise NotImplementedError
|
||||
|
||||
patches = []
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.network.download.Downloader,
|
||||
'__call__',
|
||||
downloader_call
|
||||
pip._internal.network.download.Downloader, "__call__", downloader_call
|
||||
)
|
||||
)
|
||||
# patches.append(
|
||||
@ -239,22 +260,22 @@ def pip_resolve(
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.resolution.resolvelib.resolver.Resolver,
|
||||
'resolve',
|
||||
base_resolver_resolve
|
||||
"resolve",
|
||||
base_resolver_resolve,
|
||||
)
|
||||
)
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.operations.prepare,
|
||||
'get_http_url',
|
||||
"get_http_url",
|
||||
get_http_url,
|
||||
)
|
||||
)
|
||||
patches.append(
|
||||
unittest.mock.patch.object(
|
||||
pip._internal.operations.prepare.RequirementPreparer,
|
||||
'prepare_linked_requirements_more',
|
||||
prepare_linked_requirements_more
|
||||
"prepare_linked_requirements_more",
|
||||
prepare_linked_requirements_more,
|
||||
)
|
||||
)
|
||||
# patches.append(
|
||||
@ -269,15 +290,17 @@ def pip_resolve(
|
||||
for p in patches:
|
||||
stack.enter_context(p)
|
||||
|
||||
pip._internal.cli.main.main([
|
||||
'download',
|
||||
'-q',
|
||||
'--no-cache',
|
||||
'-d',
|
||||
'/dev/null',
|
||||
pip._internal.cli.main.main(
|
||||
[
|
||||
"download",
|
||||
"-q",
|
||||
"--no-cache",
|
||||
"-d",
|
||||
"/dev/null",
|
||||
*argv,
|
||||
# 'numpy',
|
||||
])
|
||||
]
|
||||
)
|
||||
|
||||
# return sum([
|
||||
# [
|
||||
@ -291,13 +314,45 @@ def pip_resolve(
|
||||
# for o in result_requirements
|
||||
# ], [])
|
||||
logger.warn(result_requirements)
|
||||
return [
|
||||
|
||||
res = pip_resolve_t.res_t(
|
||||
entries=[
|
||||
pip_resolve_t.res_t.download_info_t(
|
||||
constraint=str(o.req),
|
||||
sha256=o.hashes()._allowed['sha256'],
|
||||
sha256=o.hashes()._allowed["sha256"],
|
||||
url=o.link.url,
|
||||
)
|
||||
for o in sum(result_requirements, [])
|
||||
]
|
||||
],
|
||||
)
|
||||
res.txt = pip_resolve_entries_to_txt(
|
||||
res.entries
|
||||
)
|
||||
|
||||
return res
|
||||
elif mode is pip_resolve_t.kwargs_t.mode_t.uv_pip_compile:
|
||||
pip_freeze = subprocess.check_output(
|
||||
[
|
||||
sys.executable,
|
||||
"-m",
|
||||
"uv",
|
||||
"pip",
|
||||
"freeze",
|
||||
],
|
||||
).decode('utf-8')
|
||||
pip_compile = subprocess.check_output(
|
||||
[
|
||||
sys.executable, '-m',
|
||||
'uv', 'pip', 'compile',
|
||||
'--generate-hashes',
|
||||
'-',
|
||||
|
||||
],
|
||||
input=pip_freeze.encode('utf-8')
|
||||
).decode('utf-8')
|
||||
|
||||
return pip_resolve_t.res_t(
|
||||
txt=pip_compile,
|
||||
)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
@ -1 +0,0 @@
|
||||
python-build
|
@ -1,16 +0,0 @@
|
||||
ipython
|
||||
jupyter
|
||||
notebook
|
||||
requests
|
||||
pyquery
|
||||
youtube-dl
|
||||
gdown
|
||||
aiohttp
|
||||
mypy
|
||||
ruff
|
||||
cython
|
||||
numpy
|
||||
scoping
|
||||
types-setuptools
|
||||
uvloop
|
||||
pydantic
|
Loading…
Reference in New Issue
Block a user