windows-subsystem-for-linux - 在 wsl2 和 onedrive 上创建虚拟环境的问题
问题描述
我在 Windows 10 机器上使用适用于 Linux (WSL2) 的 Windows 子系统和使用 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”是在正常安装中指向“lib”的符号链接。在上面的错误消息中,似乎 lib 实际上指向 lib64,所以我想这是输入/输出错误?
当通过 rclone 挂载并使用 WSL2 时,有没有办法让 venv 在 OneDrive 目录上工作?
解决方案
我的预感是,Rclone 的工作方式导致了您的问题。它声称是“灵感来自rsync
”,这意味着它并不是真正的“安装”,而是“同步”云存储。
我rclone
在一个新的 WSL 实例中进行了快速安装,我看到了与您遇到的相同的“输入/输出错误”。
我猜即使在“完整”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 实例。
推荐阅读
- python - AttributeError: 'Client' 对象没有属性 'send_message'
- php - Stripe 结帐会话和 laravel 验证
- python - Django - 是否可以根据模型字段内的内容添加模板渲染条件?
- javascript - vuejs3 - 从 v-model 更新计算值
- c - 在 Azure Pipeline 中的 macOS 上构建 32 位 dylib
- javascript - 单击依赖项时未触发useEffect
- laravel - 谷歌驱动器 api 的未经身份验证的使用已超过
- oracle - 缺少“确定”按钮和一些在 BI Publisher 中插入表格/表单
- r - 在 R 中使用 Windows CMD 系统命令返回“127”错误
- json - 如何从 JSON 对象流中获取第一个元素?