I received a Python project (which happens to be a Django project, if that matters,) that uses the fcntl
module from the standard library, which seems to be available only on Linux. When I try to run it on my Windows machine, it stops with an ImportError
, because this module does not exist here.
Is there any way for me to make a small change in the program to make it work on Windows?
The fcntl module is just used for locking the pinning file, so assuming you don't try multiple access, this can be an acceptable workaround. Place this module in your
sys.path
, and it should just work as the official fcntl module.Try using this module for development/testing purposes only in windows.
The substitute of
fcntl
on windows arewin32api
calls. The usage is completely different. It is not some switch you can just flip.In other words, porting a
fcntl
-heavy-user module to windows is not trivial. It requires you to analyze what exactly eachfcntl
call does and then find the equivalentwin32api
code, if any.There's also the possibility that some code using
fcntl
has no windows equivalent, which would require you to change the module api and maybe the structure/paradigm of the program using the module you're porting.If you provide more details about the
fcntl
calls people can find windows equivalents.Although this does not help you right away, there is an alternative that can work with both Unix (fcntl) and Windows (win32 api calls), called: portalocker
It describes itself as a cross-platform (posix/nt) API for flock-style file locking for Python. It basically maps fcntl to win32 api calls.
The original code at http://code.activestate.com/recipes/65203/ can now be installed as a separate package - https://pypi.python.org/pypi/portalocker