【python报错问题解决】【windows11】ModuleNotFoundError: No module named “fcntl“

问题

py中引入了fcntl,import fcntl。当在windows系统下运行该py时,报错“ModuleNotFoundError: No module named ‘fcntl’”。

原因

fcntl为python标准库中的一个模块,属于Unix Specific,负责操作文件锁(https://docs.python.org/3/library/fcntl.html)。当使用python进行写文件时,如果多个进程同时写同一个文件,那么可能会存在问题,fcntl就是用来避免这个问题,使用系统锁的机制来保证同时只有一个进程写文件。很显然,这个模块是为linux系统准备,windows python中是不自带的,所以当我们在windows中运行使用了fcntl模块的py时,就会报错,模块无法找到。

解决办法

由于一般我们的项目都是直接放到linux环境下去跑的,所以不牵扯问题。但我们日常开发都会在windows ide中去跑。我们可能并不需要在windows下实现文件锁,所以这里我们只需要保证能够正常加载fcntl模块即可。这里通过mock一个假的fcntl.py放到python库中即可。

1、创建fcntl.py
fcntl.py代码如下

def fcntl(fd, op, arg=0):
    return 0
def ioctl(fd, op, arg=0, mutable_flag=True):
    if mutable_flag:
        return 0
    else:
        return ""
def flock(fd, op):
    return
def lockf(fd, operation, length=0, start=0, whence=0):
    return

2、将fcntl.py 放入Python Lib中

“D:\software\miniconda\envs\maxkb” 为我虚拟环境的安装路径,将fcntl.py放入其中Lib目录下即可。再次运行py无误。
说明:Lib为python的默认标准库,在运行py时会被加载。

(maxkb) PS D:\github_codes\MaxKB> python -m site
sys.path = [
    'D:\\github_codes\\MaxKB',
    'D:\\software\\miniconda\\envs\\maxkb\\python311.zip',
    'D:\\software\\miniconda\\envs\\maxkb\\Lib',
    'D:\\software\\miniconda\\envs\\maxkb\\DLLs',
    'D:\\software\\miniconda\\envs\\maxkb',
    'D:\\software\\miniconda\\envs\\maxkb\\Lib\\site-packages',
]
USER_BASE: 'C:\\Users\\hansh\\AppData\\Roaming\\Python' (doesn't exist)
USER_SITE: 'C:\\Users\\hansh\\AppData\\Roaming\\Python\\Python311\\site-packages' (doesn't exist)
ENABLE_USER_SITE: True
(maxkb) PS D:\github_codes\MaxKB> 
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值