Open phette23 opened 4 months ago
Is your mise from brew or somewhere that installs a conf.d activation script? What happens with MISE_FISH_AUTO_ACTIVATE=0 poetry shell
? If it's not that, fish_trace=1 poetry shell
will show you exactly what fish is doing
Thank you for the comment and the link to the mise docs. Yes, mise is from homebrew. MISE_FISH_AUTO_ACTIVATE=0 poetry shell
doesn't work either, the result is the same. I see I don't need mise activate fish
in my config.fish with the auto-activation but removing it doesn't fix the issue.
The fish trace is incredibly long. I see I was wrong though, the mise activation does happen first and then later the source .venv/bin/activate.fish
. So I can't explain why the mise python comes first. It's as if the source command functions differently when in --init-command or when run on its own.
OK I may have gotten mixed up with testing or still kept mise activate fish
in my config.fish, the env var does actually work. So with these three steps:
mise activate fish
in config.fish or elsewhereMISE_FISH_AUTO_ACTIVATE=0 poetry shell
everything works as expected. The mise python is not even on PATH inside the venv because it's never activated. I'm running poetry shell
via a shell function so adding the env var isn't troublesome. If other people run into this and find that inconvenient, maybe python-poetry/poetry#9464 makes sense, but for now I would say it could be closed without merging.
hello, maybe another issue related with poetry shell
and mise
. Run poetry shell
in one terminal window A, then run eval "$(mise activate zsh)"
in another terminal window B. the PATH variable in terminal A is changed, but PATH variable of another terminal window C without poetry shell
is ok. So eval "$(mise activate zsh)"
change the PATH variables of other poetry shell
terminals .
@hailcar argggh aye lmao... this is why i hate env mutation based tool managers.
going back to asdf.
Description
I appear to have hit some kind of frustrating edge case with poetry, mise, and fish shell. If I run
poetry shell
, the venv python isn't the one used, instead the global mise python is, so all commands using venv packages fail, etc. Here's a small demo:This occurs whether the venv is inside the project directory or under ~/.local. But if I
source
the activation script, the pythons are ordered as expected:Apologies if you view this more as an issue somewhere with mise or fish but the fact that the
source
command works tells me that poetry should be able to do this. I looked at your shell code, it runsfish -i --init-command "source .venv/bin/activate.fish"
and after some experiments I couldn't find a way to make that work.Fish says it reads configuration before executing the
--init-command
so I expect mise to activate first, then the source, but that doesn't happen. If I print as each happens, I see that thesource
goes first and then themise activate fish
in my config.fish. I see for some other shells you send a command to the terminal after launching a subshell and that approach also works for fish (instead of using --init-command).Workarounds
I can replace
poety shell
withsource (poetry env info -p)/bin/activate.fish
but that has the downside of not starting a subshell.The issue does not occur in bash, so I can use bash with
SHELL=bash poetry shell
, but then I'm not using my favored shell in the venv.Poetry Installation Method
pipx
Operating System
macOS 14.5
Poetry Version
Poetry (version 1.8.3)
Poetry Configuration
Python Sysconfig
Example pyproject.toml
Poetry Runtime Logs