我收到了一个Python项目(假设这是一个Django项目),其中使用了标准库中的fcntl
模块,该模块似乎仅在Linux上可用。当我尝试在Windows机器上运行它时,出现了ImportError
错误,因为此模块在此处不存在。
有没有办法对程序进行小幅修改,使其在Windows上运行?
fcntl
在Windows上的替代品是使用win32api
调用。它们的用法完全不同,不能简单地切换使用。
换句话说,将一个依赖于fcntl
的模块移植到Windows并不容易。这需要你分析每个fcntl
调用具体的功能,并找到相应的win32api
代码(如果有的话)。
同时,也有可能一些使用fcntl
的代码在Windows上没有等价物,这就需要你更改模块API,甚至修改使用所移植模块的程序的结构/范例。
如果你提供有关fcntl
调用的更多详细信息,则可以帮助人们查找Windows中的等效物。
fcntl
/win32api
调用,这些调用可以用于几乎任何事情;我不相信在Windows上有什么是安全的;我建议你提出另一个问题,而不是发表评论。 - nosklofcntl模块仅用于锁定固定文件,因此假定您不尝试多个访问,则可以将其作为一种可接受的解决方法。将此模块放置在您的sys.path
中,它应该可以像官方的fcntl模块一样工作。
在Windows中,仅限于开发/测试目的,请尝试使用此模块 (源代码)。
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
当然,你需要将fcntl.py
模块放置在要使用的Python解释器的site-packages
目录中。例如:%LOCALAPPDATA%\Programs\Python\Python310\lib\site-packages\fcntl\
。这就是我的site-packages
所在的位置。查看Tutorialspoint以查找你的位置。
虽然这并不能立即帮到你,但有一种备选方案可以在Unix(fcntl)和Windows(win32 api调用)中使用,称为:portalocker
它自称是Python的跨平台(posix / nt)API,用于flock风格的文件锁定。它基本上将fcntl映射到win32的api调用上。
最初的代码位于 http://code.activestate.com/recipes/65203/ ,现在可以安装为独立软件包 - https://pypi.python.org/pypi/portalocker 。
fcntl
做的事情不仅仅是锁定文件。 - c z