问题
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中
如上图,“C:\Program Files\Python\Python36” 为我 python3.6.9的安装路径,将fcntl.py放入其中Lib目录下即可。再次运行py无误。
说明:Lib为python的默认标准库,在运行py时会被加载。
发表评论