vfox icon indicating copy to clipboard operation
vfox copied to clipboard

[BUG]: venv虚拟环境指向python链接丢失

Open ieayoio opened this issue 1 year ago • 13 comments
trafficstars

Version vfox version 0.5.3 OS Windows:wsl ubuntu22.04

Describe the bug 在wsl重启后,创建虚拟环境venv里指向的python链接丢失,有什么好的解决办法没

使用项目级作用域,创建venv虚拟环境,过程如下:

➜  test vfox use -p python
Please select a version of python:
  -> 3.10.14
Now using [email protected].
➜  test python -m venv venv
➜  test ll venv/bin/python
lrwxrwxrwx 1 ieayoio ieayoio 66  5月 24 09:54 venv/bin/python -> /home/ieayoio/.version-fox/temp/1716480000-15160/python/bin/python

关闭wsl再次启动后venv中指向python环境丢失

➜  test ll venv/bin/python
lrwxrwxrwx 1 ieayoio ieayoio 66  5月 24 09:54 venv/bin/python -> /home/ieayoio/.version-fox/temp/1716480000-15160/python/bin/python
➜  test ll /home/ieayoio/.version-fox/temp/1716480000-15160/python/bin/python
ls: 无法访问 '/home/ieayoio/.version-fox/temp/1716480000-15160/python/bin/python': 没有那个文件或目录

Screenshots[optional] image

ieayoio avatar May 24 '24 02:05 ieayoio

因为每个shell有固定的路径, shell关闭, 这个地址就失效了.

目前的话, 你只能通过-g切换版本之后, 在用venv创建虚拟环境. 因为全局的路径是固定的

aooohan avatar May 24 '24 06:05 aooohan

我测试下来,即使是global的,每次登录也会在~/.version-fox/temp/下创建一个新的啊

mikeshi80 avatar May 24 '24 07:05 mikeshi80

因为每个shell有固定的路径, shell关闭, 这个地址就失效了.

目前的话, 你只能通过-g切换版本之后, 在用venv创建虚拟环境. 因为全局的路径是固定的

我验证了一下,当前即使使用全局,venv生成的也是temp的链接 image

ieayoio avatar May 24 '24 07:05 ieayoio

目前的话, 你只能通过-g切换版本之后, 在用venv创建虚拟环境. 因为全局的路径是固定的

这个说错了, 我忘了激活的时候也是配置的临时目录了.

有一个解决方案是放到vfox-python中去解决, 在切换的时候, 可以主动去修复一下venv生成的符号连接的指向.

本身venv和vfox就是有点矛盾的. 如果是0.4.x版本应该没有问题, 因为采用的是直接刷新PATH(绝对路径). 但是这个方案作为通用版本管理器, 不合适,问题有点多. 目前没有想到更好的办法, 上面提到的倒是行得通.

aooohan avatar May 24 '24 07:05 aooohan

vfox use -p python 这个是项目级别,能否不使用临时目录的目录链接,而使用当前项目所在目录创建目录链接。这样每次进入项目,并使用项目级别指定版本后该目录路径永远不会改变。

jan-bar avatar May 24 '24 08:05 jan-bar

目前的话, 你只能通过-g切换版本之后, 在用venv创建虚拟环境. 因为全局的路径是固定的

这个说错了, 我忘了激活的时候也是配置的临时目录了.

有一个解决方案是放到vfox-python中去解决, 在切换的时候, 可以主动去修复一下venv生成的符号连接的指向.

本身venv和vfox就是有点矛盾的. 如果是0.4.x版本应该没有问题, 因为采用的是直接刷新PATH(绝对路径). 但是这个方案作为通用版本管理器, 不合适,问题有点多. 目前没有想到更好的办法, 上面提到的倒是行得通.

我也是这么想,不行就手动修复了一下venv生成的符号链接

ieayoio avatar May 24 '24 08:05 ieayoio

vfox use -p python 这个是项目级别,能否不使用临时目录的目录链接,而使用当前项目所在目录创建目录链接。这样每次进入项目,并使用项目级别指定版本后该目录路径永远不会改变。

从逻辑上说我认为应该是这样的效果,我想着有种解决方案就是使用目录的绝对路径作为编码生成临时目录,目录已经存在就不再使用新的临时目录,这样即使每次都生成新的临时路径,也保持一致,我认为这样也能接受

ieayoio avatar May 24 '24 08:05 ieayoio

vfox use -p python 这个是项目级别,能否不使用临时目录的目录链接,而使用当前项目所在目录创建目录链接。这样每次进入项目,并使用项目级别指定版本后该目录路径永远不会改变。

从逻辑上说我认为应该是这样的效果,我想着有种解决方案就是使用目录的绝对路径作为编码生成临时目录,目录已经存在就不再使用新的临时目录,这样即使每次都生成新的临时路径,也保持一致,我认为这样也能接受

这个方案可行, 而且也更通用. 可以作为增强方案记录一下.

aooohan avatar May 24 '24 09:05 aooohan

既然是项目相关的,就应该在项目下生成相应的目录,没有的时候生成,有的话就复用,比如.version_fox.env目录下。这样就固定下来了。当然还可以在目录下生成一个配置文件,记录它的环境在哪里,而这个目录不会自动清空,也是ok的,这样就可以保证所有的环境都集中在某个地方生成。

而Global为什么也是每次生成一个临时目录就更让我不解了,感觉session的话每次生成一个临时目录才比较合理。

mikeshi80 avatar May 28 '24 10:05 mikeshi80

而Global为什么也是每次生成一个临时目录就更让我不解了,感觉session的话每次生成一个临时目录才比较合理。

Global每次也会生成全局的current符号连接. 只是为了方便, 在shell激活的时候, 只配置了临时目录的符号链接到PATH里, 因为不管是Global、Session、Project, 都只是呢一个符号链接来回变而已. 当时并没有考虑venv这种情况.

aooohan avatar May 28 '24 11:05 aooohan

抱歉挖坟,但想问一下这个有workaround吗? 我用Poetry时Poetry找不到$HOME\.version-fox\temp\<乱数>\python\python.exe(因为<乱数>文件夹已经不存在了),我现在只能透过重装Poetry解决

abceleung avatar Aug 29 '24 02:08 abceleung

windows下使用cmd 运行poetry shell 然后执行pip 也是同样的问题, 但是切换为powershell就没问题了,还是得修一下吧

just-test-code avatar Sep 04 '24 10:09 just-test-code

这个问题如果长期没法解决的话,还是在 use 或者 install 的时候加一条警告信息比较好吧?不然要浪费好多时间重装 venv。

XcantloadX avatar May 01 '25 08:05 XcantloadX