我收到了一个Python项目(恰好是Django项目,如果这很重要的话),它使用标准库中的fcntl
模块,该模块似乎仅在Linux上可用。当我尝试在我的Windows机器上运行它时,它会以ImportError
停止,因为此模块不存在。
我有什么方法可以对程序进行一些小改动,使其在Windows上运行?
答案 0 :(得分:69)
fcntl
在Windows上的替换是win32api
次调用。用法完全不同。这不是一些你可以翻转的开关。
换句话说,将fcntl
- 重用户模块移植到窗口并非易事。它要求您分析每个fcntl
调用的确切内容,然后找到等效的win32api
代码(如果有)。
使用fcntl
的某些代码也可能没有等效的窗口,这需要您使用您正在移植的模块更改模块api以及程序的结构/范例。
如果您提供有关fcntl
来电的更多详细信息,那么人们可以找到等效的Windows。
答案 1 :(得分:30)
fcntl模块仅用于锁定固定文件,因此假设您不尝试多次访问,这可能是一种可接受的解决方法。将此模块放在sys.path
中,它应该只作为官方的fcntl模块。
尝试仅在Windows中使用this module进行开发/测试。
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 :(得分:16)
虽然这对你没有任何帮助,但有一种方法可以同时适用于Unix(fcntl)和Windows(win32 api调用),名为: portalocker
它将自己描述为用于Python的flock风格文件锁定的跨平台(posix / nt)API。它基本上将fcntl映射到win32 api调用。
http://code.activestate.com/recipes/65203/上的原始代码现在可以作为单独的软件包安装 - https://pypi.python.org/pypi/portalocker