diff --git a/README.md b/README.md index 2bae130..32f697f 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ - Индексация путей из переменных окружения - Индексация директорий из `PATH` - Пользовательские алиасы через `aliases.json` +- В индекс попадают только существующие директории (не файлы и не отдельные объекты) - SQLite-хранилище индекса - Поиск по `name`, `keywords`, `path` - Преобразование абсолютного пути в псевдопуть (`$VAR/...`) по самому длинному префиксу @@ -22,13 +23,45 @@ pip install -e . ## Установка через pipx (глобальная команда `pathi`) +< codex/fix-pip-install-e-installation-issue-omaxnc +Если нужно, чтобы `pathi` была доступна глобально (вне конкретного venv), используйте `pipx`. + +На дистрибутивах с PEP 668 (например, Arch) команда +`python3 -m pip install --user pipx` может падать с `externally-managed-environment`. +В этом случае сначала установите `pipx` через пакетный менеджер: + +```bash +# Arch +sudo pacman -S python-pipx + +# Debian/Ubuntu +sudo apt install pipx + +# Fedora +sudo dnf install pipx +``` + +После этого: + +```bash +pipx ensurepath +# перезапустите терминал +pipx install /полный/путь/к/EnvPathShortcutTool +``` + +Если `pipx` всё ещё не установлен и у вас НЕ PEP668-окружение, можно использовать fallback: += Если нужно, чтобы `pathi` была доступна глобально (вне конкретного venv), используйте `pipx`: +> main ```bash python3 -m pip install --user pipx python3 -m pipx ensurepath +< codex/fix-pip-install-e-installation-issue-omaxnc += # перезапустите терминал pipx install /полный/путь/к/EnvPathShortcutTool +> main ``` Пример для вашего случая: diff --git a/pathindex/cli.py b/pathindex/cli.py index 7d262d0..38f9522 100644 --- a/pathindex/cli.py +++ b/pathindex/cli.py @@ -128,6 +128,9 @@ def cmd_alias_add(args: argparse.Namespace) -> int: if not Path(p).is_absolute(): print("Alias path must be absolute") return 2 + if not Path(p).is_dir(): + print("Alias path must point to an existing directory") + return 2 aliases[args.name] = p save_aliases(alias_file, aliases) print(f"Added alias {args.name} -> {p}") diff --git a/pathindex/collectors.py b/pathindex/collectors.py index bdc37a6..64f3938 100644 --- a/pathindex/collectors.py +++ b/pathindex/collectors.py @@ -10,7 +10,7 @@ def path_like(value: str) -> bool: if not value: return False p = Path(value).expanduser() - return p.is_absolute() and p.exists() + return p.is_absolute() and p.is_dir() def keywords_for(path: str, name: str) -> str: @@ -45,6 +45,6 @@ def collect_alias_entries(aliases: dict[str, str]) -> list[IndexEntry]: entries: list[IndexEntry] = [] for name, raw in aliases.items(): p = str(Path(raw).expanduser()) - if Path(p).is_absolute() and Path(p).exists(): + if Path(p).is_absolute() and Path(p).is_dir(): entries.append(IndexEntry(name, str(Path(p).resolve()), keywords_for(p, name), "alias")) return entries