hatch icon indicating copy to clipboard operation
hatch copied to clipboard

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

Open deepbrook opened this issue 1 year ago • 1 comments

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 <[email protected]>
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

</details>

deepbrook avatar Jan 03 '24 14:01 deepbrook

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.

ofek avatar Jan 21 '24 04:01 ofek