pypa / hatch

Modern, extensible Python project management
https://hatch.pypa.io/latest/
MIT License
5.83k stars 288 forks source link

Running into OS ArgLength Limit when activating env with `hatch shell` #1193

Open deepbrook opened 7 months ago

deepbrook commented 7 months ago

I'm running fish with starship. I've previously used virtualfish to manage python envs and wanted to give hatch a spin.

However, something's not right, it appears:

on β›΅ minikube (default) .../python-hcl2-terraform on ξ‚  main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None took 8m55s
🐟 ❯ hatch shell
exec: Failed to execute process '/usr/local/bin/starship': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/whoami': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/hostname': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/uptime': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/hostname': An argument or exported variable exceeds the OS argument length limit.

exec: Failed to execute process '/usr/bin/uname': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/git': An argument or exported variable exceeds the OS argument length limit.
deepbrook@ARCHIBALD ~/d/python-hcl2-terraform> source "/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish"
exec: Failed to execute process '/usr/bin/head': An argument or exported variable exceeds the OS argument length limit.
test: Missing argument at index 3
-lt 3
      ^
~/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish (line 63):
if test (echo $FISH_VERSION | head -c 1) -lt 3
   ^
from sourcing file ~/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish
exec: Failed to execute process '/usr/bin/git': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/basename': An argument or exported variable exceeds the OS argument length limit.
() deepbrook@ARCHIBALD ~/d/python-hcl2-terraform>

If I ctrl+d out of the shell it's all good again.

I cannot find anything inherently wrong with the activate.fish script being sourced, but I'm not well-versed in fish either.

Anyone here have an idea how to debug this? I wasn't able to dump any env vars due to the error so im a bit stumped here.

I'm on hatch 1.9.1 as per pip:

on β›΅ minikube (default) .../python-hcl2-terraform on ξ‚  main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None
🐟 ❯ pip show hatch
Name: hatch
Version: 1.9.1
Summary: Modern, extensible Python project management
Home-page:
Author:
Author-email: Ofek Lev <oss@ofek.dev>
License:
Location: /usr/local/lib/python3.10/dist-packages
Requires: click, hatchling, httpx, hyperlink, keyring, packaging, pexpect, platformdirs, rich, shellingham, tomli-w, tomlkit, userpath, virtualenv, zstandard
Required-by:

hatch version outputs 0.1.0, which seems weird:

on β›΅ minikube (default) .../python-hcl2-terraform on ξ‚  main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None
🐟 ❯ hatch version
0.1.0

Here's my activate.fish file, if it matters:

Here's my activate.fish file, if that helps. ```fish # This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. # Do not run it directly. function _bashify_path -d "Converts a fish path to something bash can recognize" set fishy_path $argv set bashy_path $fishy_path[1] for path_part in $fishy_path[2..-1] set bashy_path "$bashy_path:$path_part" end echo $bashy_path end function _fishify_path -d "Converts a bash path to something fish can recognize" echo $argv | tr ':' '\n' end function deactivate -d 'Exit virtualenv mode and return to the normal environment.' # reset old environment variables if test -n "$_OLD_VIRTUAL_PATH" # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH") else set -gx PATH $_OLD_VIRTUAL_PATH end set -e _OLD_VIRTUAL_PATH end if test -n "$_OLD_VIRTUAL_PYTHONHOME" set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME" set -e _OLD_VIRTUAL_PYTHONHOME end if test -n "$_OLD_FISH_PROMPT_OVERRIDE" and functions -q _old_fish_prompt # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. set -l fish_function_path # Erase virtualenv's `fish_prompt` and restore the original. functions -e fish_prompt functions -c _old_fish_prompt fish_prompt functions -e _old_fish_prompt set -e _OLD_FISH_PROMPT_OVERRIDE end set -e VIRTUAL_ENV if test "$argv[1]" != 'nondestructive' # Self-destruct! functions -e pydoc functions -e deactivate functions -e _bashify_path functions -e _fishify_path end end # Unset irrelevant variables. deactivate nondestructive set -gx VIRTUAL_ENV '/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf' # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH) else set -gx _OLD_VIRTUAL_PATH $PATH end set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH # Unset `$PYTHONHOME` if set. if set -q PYTHONHOME set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME set -e PYTHONHOME end function pydoc python -m pydoc $argv end if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # Copy the current `fish_prompt` function as `_old_fish_prompt`. functions -c fish_prompt _old_fish_prompt function fish_prompt # Run the user's prompt first; it might depend on (pipe)status. set -l prompt (_old_fish_prompt) # Prompt override provided? # If not, just prepend the environment name. if test -n '' printf '(%s) ' '' else printf '(%s) ' (basename "$VIRTUAL_ENV") end string join -- \n $prompt # handle multi-line prompts end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" end ```
ofek commented 7 months ago

Hey there, sorry for the trouble! Does it work if you manually run source "/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish"?

The version command shows you the version of your project, to display the version of Hatch itself you would do hatch --version.