在虚拟环境中由于EnvironmentError:[Errno 1]操作不允许而无法安装包。

5

我试图使用virtualenv创建一个Python虚拟环境,输入命令virtuelenv env --python=python3时出现错误。

PermissionError: [Errno 1] Operation not permitted: '/mnt/d/venv/bin/python3'

所以我用sudo命令输入sudo virtualenv env --python=python3

这次命令可以正常运行,现在我激活该环境并尝试使用pip安装一些内容,但是出现了以下错误:

Could not install packages due to an EnvironmentError: [Errno 1] Operation not permitted

我知道如果使用sudopip一起使用,它会将包安装到全局网站包而不是虚拟环境的网站包。我想要将东西安装到虚拟环境中。

我正在WSL上运行Ubuntu Bionic,之前我运行过Ubuntu Xenial并没有遇到这个问题。

请给予建议。


如果这是一个AppArmor的“问题”,我不会感到惊讶。 - Roman Luštrik
1个回答

5
当使用WSL时:请在Linux层次结构中创建虚拟环境,而不是Windows层次结构中。通常这意味着应该在/home/YOUR_USER/而不是/mnt/...中创建虚拟环境。

1
只是一个问题,为什么只有在尝试在/mnt/中创建venv时才会出现这个问题? - Frontear
2
在WSL上,Windows™文件系统被挂载在/mnt/中。例如D:\被挂载在/mnt/d/中。因此,这些是两个不同的文件系统(可能是Linux侧的ext4和Windows™侧的NTFS)。某些代码可能会在两个文件系统上表现出不同的行为,从而间接导致错误。我没有Windows电脑来检查并提供更多信息,所以这只是我的猜测。(此外,在Windows™和Linux中可执行文件是不同的,前者使用PE,后者使用ELF,因此Linux可能无法使用python.exe,反之亦然。) - Julien Palard
这些都是很好的观点,感谢您澄清事情。 - Frontear
1
我通过使用“metadata”选项挂载驱动器来解决了这个问题,以便WSL可以管理venv文件的权限: sudo umount /mnt/d; sudo mount -t drvfs D: /mnt/d -o metadata - AndyDeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接