Skip to content

Commit 6dffa3d

Browse files
authored
fix: missing git urls when freezing requirements (#22)
Signed-off-by: Frost Ming <[email protected]>
1 parent 8891b27 commit 6dffa3d

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

nodes/api.py

+23-14
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import time
1212
import uuid
1313
import zipfile
14+
from importlib.metadata import Distribution, distributions
1415
from pathlib import Path
1516
from typing import Any, Union
1617

@@ -25,25 +26,33 @@
2526
ZPath = Union[Path, zipfile.Path]
2627
TEMP_FOLDER = Path(__file__).parent.parent / "temp"
2728
COMFY_PACK_DIR = Path(__file__).parent.parent / "src" / "comfy_pack"
28-
EXCLUDE_PACKAGES = ["bentoml", "onnxruntime"] # TODO: standardize this
29+
EXCLUDE_PACKAGES = ["bentoml", "onnxruntime", "conda"] # TODO: standardize this
30+
31+
32+
def _get_requirement_string(dist: Distribution) -> str:
33+
direct_url_text = dist.read_text("direct_url.json")
34+
pinned_str = f'{dist.metadata["Name"]}=={dist.version}'
35+
if not direct_url_text:
36+
return pinned_str
37+
direct_url = json.loads(direct_url_text)
38+
if url := direct_url.get("url"):
39+
if url.startswith("file://"):
40+
# we are not able to share local files
41+
return pinned_str
42+
if vcs_info := direct_url.get("vcs_info"):
43+
url = f"{vcs_info['vcs']}+{url}@{vcs_info['commit_id']}"
44+
if subdirectory := direct_url.get("subdirectory"):
45+
url += f"#subdirectory={subdirectory}"
46+
return f"{dist.metadata['Name']} @ {url}"
47+
else:
48+
return pinned_str
2949

3050

3151
async def _write_requirements(path: ZPath, extras: list[str] | None = None) -> None:
3252
print("Package => Writing requirements.txt")
3353
with path.joinpath("requirements.txt").open("w") as f:
34-
proc = await asyncio.subprocess.create_subprocess_exec(
35-
sys.executable,
36-
"-m",
37-
"pip",
38-
"list",
39-
"--format",
40-
"freeze",
41-
"--exclude-editable",
42-
*[f"--exclude={p}" for p in EXCLUDE_PACKAGES],
43-
stdout=subprocess.PIPE,
44-
)
45-
stdout, _ = await proc.communicate()
46-
f.write(stdout.decode().rstrip("\n") + "\n")
54+
for dist in distributions():
55+
f.write(_get_requirement_string(dist) + "\n")
4756
if extras:
4857
f.write("\n".join(extras) + "\n")
4958

0 commit comments

Comments
 (0)