comfy-env 0.1.23__tar.gz → 0.1.25__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of comfy-env might be problematic. Click here for more details.

Files changed (37) hide show
  1. {comfy_env-0.1.23 → comfy_env-0.1.25}/PKG-INFO +1 -1
  2. {comfy_env-0.1.23 → comfy_env-0.1.25}/pyproject.toml +1 -1
  3. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/environment/cache.py +6 -3
  4. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/workers/subprocess.py +6 -1
  5. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/apt.py +25 -19
  6. {comfy_env-0.1.23 → comfy_env-0.1.25}/.github/workflows/ci.yml +0 -0
  7. {comfy_env-0.1.23 → comfy_env-0.1.25}/.github/workflows/publish.yml +0 -0
  8. {comfy_env-0.1.23 → comfy_env-0.1.25}/.gitignore +0 -0
  9. {comfy_env-0.1.23 → comfy_env-0.1.25}/LICENSE +0 -0
  10. {comfy_env-0.1.23 → comfy_env-0.1.25}/README.md +0 -0
  11. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/__init__.py +0 -0
  12. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/cli.py +0 -0
  13. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/config/__init__.py +0 -0
  14. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/config/parser.py +0 -0
  15. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/config/types.py +0 -0
  16. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/detection/__init__.py +0 -0
  17. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/detection/cuda.py +0 -0
  18. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/detection/gpu.py +0 -0
  19. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/detection/platform.py +0 -0
  20. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/detection/runtime.py +0 -0
  21. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/environment/__init__.py +0 -0
  22. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/environment/libomp.py +0 -0
  23. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/environment/paths.py +0 -0
  24. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/environment/setup.py +0 -0
  25. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/install.py +0 -0
  26. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/__init__.py +0 -0
  27. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/tensor_utils.py +0 -0
  28. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/workers/__init__.py +0 -0
  29. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/workers/base.py +0 -0
  30. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/isolation/wrap.py +0 -0
  31. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/__init__.py +0 -0
  32. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/cuda_wheels.py +0 -0
  33. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/node_dependencies.py +0 -0
  34. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/pixi.py +0 -0
  35. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/packages/toml_generator.py +0 -0
  36. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/templates/comfy-env-instructions.txt +0 -0
  37. {comfy_env-0.1.23 → comfy_env-0.1.25}/src/comfy_env/templates/comfy-env.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: comfy-env
3
- Version: 0.1.23
3
+ Version: 0.1.25
4
4
  Summary: Environment management for ComfyUI custom nodes - CUDA wheel resolution and process isolation
5
5
  Project-URL: Homepage, https://github.com/PozzettiAndrea/comfy-env
6
6
  Project-URL: Repository, https://github.com/PozzettiAndrea/comfy-env
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "comfy-env"
3
- version = "0.1.23"
3
+ version = "0.1.25"
4
4
  description = "Environment management for ComfyUI custom nodes - CUDA wheel resolution and process isolation"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import glob
4
4
  import hashlib
5
+ import os
5
6
  import shutil
6
7
  import sys
7
8
  from datetime import datetime
@@ -16,14 +17,16 @@ try:
16
17
  except ImportError:
17
18
  __version__ = "0.0.0-dev"
18
19
 
19
- CACHE_DIR = Path.home() / ".comfy-env" / "envs"
20
+ CACHE_DIR = Path.home() / ".comfy-env" / "envs" # Default, use get_cache_dir() for dynamic lookup
20
21
  MARKER_FILE = ".comfy-env-marker.toml"
21
22
  METADATA_FILE = ".comfy-env-metadata.toml"
22
23
 
23
24
 
24
25
  def get_cache_dir() -> Path:
25
- CACHE_DIR.mkdir(parents=True, exist_ok=True)
26
- return CACHE_DIR
26
+ """Get cache dir, checking COMFY_ENV_CACHE_DIR env var each time."""
27
+ cache_dir = Path(os.environ.get("COMFY_ENV_CACHE_DIR", Path.home() / ".comfy-env" / "envs"))
28
+ cache_dir.mkdir(parents=True, exist_ok=True)
29
+ return cache_dir
27
30
 
28
31
 
29
32
  def compute_config_hash(config_path: Path) -> str:
@@ -668,7 +668,10 @@ def _to_shm(obj, registry, visited=None):
668
668
  visited = {}
669
669
  obj_id = id(obj)
670
670
  if obj_id in visited:
671
- return visited[obj_id]
671
+ cached = visited[obj_id]
672
+ if isinstance(cached, dict) and cached.get("__type__") == "TensorRef":
673
+ print(f"[SHM DEBUG] _to_shm CACHE HIT: id={obj_id} -> storage_key=...{cached.get('storage_key','?')[-20:]}, tensor_size={cached.get('tensor_size')}", file=sys.stderr)
674
+ return cached
672
675
  t = type(obj).__name__
673
676
 
674
677
  # Tensor -> use PyTorch's native shared memory (bypasses resource_tracker)
@@ -676,6 +679,7 @@ def _to_shm(obj, registry, visited=None):
676
679
  import torch
677
680
  tensor = obj.detach().cpu().contiguous()
678
681
  result = _serialize_tensor_native(tensor, registry)
682
+ print(f"[SHM DEBUG] _to_shm Tensor: id={obj_id}, orig_shape={list(obj.shape)}, new_shape={list(tensor.shape)} -> storage_key=...{result.get('storage_key','?')[-20:]}, tensor_size={result.get('tensor_size')}", file=sys.stderr)
679
683
  visited[obj_id] = result
680
684
  return result
681
685
 
@@ -769,6 +773,7 @@ def _from_shm(obj):
769
773
  # TensorRef -> use PyTorch's native deserialization (new format, worker->parent)
770
774
  if obj.get("__type__") == "TensorRef":
771
775
  tensor = _deserialize_tensor_native(obj)
776
+ print(f"[SHM DEBUG] _from_shm TensorRef: storage_key=...{obj.get('storage_key','?')[-20:]}, expected_size={obj.get('tensor_size')} -> actual_shape={list(tensor.shape)}", file=sys.stderr)
772
777
  # Convert back to numpy if it was originally numpy
773
778
  if obj.get("__was_numpy__"):
774
779
  return tensor.numpy()
@@ -32,29 +32,35 @@ def apt_install(packages: List[str], log: Callable[[str], None] = print) -> bool
32
32
  else:
33
33
  log("[apt] apt-get update succeeded")
34
34
 
35
- # Install missing packages
36
- log(f"[apt] Running: sudo apt-get install -y {' '.join(missing)}")
37
- result = subprocess.run(
38
- ["sudo", "apt-get", "install", "-y"] + missing,
39
- capture_output=True, text=True
40
- )
41
-
42
- if result.returncode != 0:
43
- log(f"[apt] ERROR: apt-get install failed (exit {result.returncode})")
44
- log(f"[apt] stdout: {result.stdout}")
45
- log(f"[apt] stderr: {result.stderr}")
46
- return False
35
+ # Install packages ONE BY ONE so one failure doesn't block others
36
+ installed = []
37
+ failed = []
38
+ for pkg in missing:
39
+ log(f"[apt] Installing: {pkg}")
40
+ result = subprocess.run(
41
+ ["sudo", "apt-get", "install", "-y", pkg],
42
+ capture_output=True, text=True
43
+ )
44
+ if result.returncode != 0:
45
+ log(f"[apt] FAILED: {pkg} - {result.stderr.strip()}")
46
+ failed.append(pkg)
47
+ else:
48
+ log(f"[apt] OK: {pkg}")
49
+ installed.append(pkg)
47
50
 
48
- log("[apt] Installation succeeded")
51
+ # Summary
52
+ if installed:
53
+ log(f"[apt] Successfully installed: {installed}")
54
+ if failed:
55
+ log(f"[apt] Failed to install: {failed}")
49
56
 
50
- # Verify installation
51
- still_missing = check_apt_packages(missing)
57
+ # Verify what's actually installed now
58
+ still_missing = check_apt_packages(packages)
52
59
  if still_missing:
53
- log(f"[apt] WARNING: These packages still not found: {still_missing}")
54
- return False
60
+ log(f"[apt] WARNING: These packages are not available: {still_missing}")
55
61
 
56
- log("[apt] All packages verified installed")
57
- return True
62
+ # Return True if we installed at least something (partial success is OK)
63
+ return len(installed) > 0 or len(missing) == len(failed)
58
64
 
59
65
 
60
66
  def check_apt_packages(packages: List[str]) -> List[str]:
File without changes
File without changes
File without changes