You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2编译Cython模块时出现“Operation not permitted”错误,但生成的.so文件可正常使用

WSL2编译Cython模块时出现“Operation not permitted”错误,但生成的.so文件可正常使用

看起来你遇到的是WSL2跨文件系统操作的权限兼容性问题,别担心,我们一步步拆解原因和解决办法:

首先聚焦错误核心:最后一步的copying build/.../m1_mod.cpython-310-x86_64-linux-gnu.so -> error: [Errno 1] Operation not permitted,说明.so模块已经在build目录里成功生成了,只是把文件复制到当前工作目录时触发了权限限制——你的工作目录在/mnt/c/...,也就是WSL2挂载的Windows NTFS分区目录,这是问题的根源。


为什么会出现这个问题?

WSL2对Windows NTFS文件系统的权限是模拟实现的,并不支持完整的Linux权限模型。默认挂载规则下,NTFS目录的权限位可能和Linux的文件操作预期不匹配,导致看似简单的复制操作被拒绝,而实际上编译出来的模块本身是没问题的。


解决办法

这里有两个实用的方案,你可以根据需求选择:

1. 迁移项目到WSL原生文件系统(最省心)

WSL的原生文件系统(比如/home/你的用户名/下的目录)完全支持Linux权限机制,不会出现这类跨系统的权限问题:

  • 在WSL里创建项目目录:mkdir -p ~/cython_demo
  • 把你的m2_mod.pyx和m1_setup.py复制到这个目录
  • 重新运行编译命令python3 m1_setup.py build_ext --inplace,复制步骤就能正常完成了

2. 调整WSL挂载权限(如果必须在Windows目录工作)

如果坚持要在/mnt/c下开发,可以修改WSL的挂载配置,让NTFS目录的权限更贴合Linux预期:

  • 在WSL里创建/编辑/etc/wsl.conf文件:
    sudo nano /etc/wsl.conf
    
  • 添加以下配置内容:
    [automount]
    options = "metadata,umask=0022,fmask=0022"
    
  • 保存后,在Windows的命令提示符/PowerShell里执行wsl --shutdown关闭WSL,再重新打开WSL
  • 再次运行编译命令,复制操作就能正常执行了

额外小提示:消除Cython的FutureWarning

你看到的关于language_level的警告也可以轻松解决:

  • 要么在m2_mod.pyx的最顶部添加一行:
    # cython: language_level=3str
    
  • 要么在m1_setup.py的cythonize方法里指定参数:
    setup(ext_modules = cythonize(["m2_mod.pyx"], compiler_directives={"language_level": "3str"}))
    

备注:内容来源于stack exchange,提问作者user2585330

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:05:27