在 wsl2 和 onedrive 上创建虚拟环境的问题

Issue with creating virtual environment on wsl2 and onedrive

我在 Windows 10 机器上使用 Windows 子系统 Linux (WSL2),并使用 rclone 安装 OneDrive。 在本地目录中使用WSL2时,我可以为项目创建一个虚拟环境:

python -m venv myenv/

但是,如果我在 OneDrive 上的一个目录中,并且我 运行 这个命令,我会得到一个错误:

Error: [Errno 5] Input/output error: 'lib' -> '/home/andrew/onedrive/myproject/venv/lib64'

如果我查看 myproject 目录,我可以看到已经创建了目录 venv。然而它是不完整的,因为它只有 'lib' 和 'include' 子目录。正确创建后(即在不在 OneDrive 上的目录中),它具有 'lib、'include'、'bin'、'lib64'、'share' 和 'pyvenv.cfg'.

'lib64'是一个符号link指向正常安装中的'lib'。在上面的错误消息中,似乎 lib 实际上指向 lib64,所以我想这是 input/output 错误?

有没有办法让 venv 在通过 rclone 挂载并使用 WSL2 时在 OneDrive 目录上工作?

我的直觉是 Rclone 的工作方式导致了您的问题。它声称是“受rsync启发”,这意味着它并不是真正的“挂载”,而是“同步”云存储。

我在新的 WSL 实例中快速安装了 rclone,我看到了与您遇到的相同的“Input/Output 错误”。

我猜即使在“完整”Linux 安装下您也会遇到同样的问题。换句话说,我怀疑这与 WSl 和 rclone 之间的交互有什么关系。它可能更多地是关于 Python 的 venv 模块和 rclone 之间的交互。我不确定,但我怀疑 rclone 是为“实时”使用而设计的。更多的是能够从 Linux.

访问(和写入)云存储提供商上的文件

好消息是可能有替代方案。 Windows 自动使您的 OneDrive 文件夹在 %userprofile%\OneDrive 中可用。从 WSL,您可以通过以下方式访问它:

cd $(powershell.exe -c 'Write-Host -NoNewLine $env:userprofile' | xargs -0 wslpath)/OneDrive

通常是 /mnt/c/Users/<yourusername>/OneDrive

从那里开始,python3 -m venv myvenv/ 对我来说工作正常。

也就是说,我强烈建议不要在 WSL2 中这样做,因为 NTFS 文件的性能很差。如果确实需要,最好使用 WSL1 实例。