Ich habe ein Python-Projekt erhalten (das zufällig ein Django-Projekt ist, wenn das wichtig ist), das das fcntl
Modul aus der Standardbibliothek verwendet, die anscheinend nur unter Linux verfügbar ist. Wenn ich versuche, es auf meinem Windows-Computer auszuführen, wird es mit einem beendet ImportError
, da dieses Modul hier nicht vorhanden ist.
Gibt es eine Möglichkeit für mich, eine kleine Änderung am Programm vorzunehmen, damit es unter Windows funktioniert?
Antworten:
Der Ersatz für
fcntl
On Windows sindwin32api
Aufrufe. Die Verwendung ist völlig anders. Es ist kein Schalter, den man einfach umlegen kann.Mit anderen Worten, das Portieren eines
fcntl
-heavy-user-Moduls nach Windows ist nicht trivial. Sie müssen analysieren, was genau jederfcntl
Anruf bewirkt, und dann den entsprechendenwin32api
Code finden, falls vorhanden.Es besteht auch die Möglichkeit, dass ein Teil des verwendeten Codes
fcntl
keine Windows-Entsprechung aufweist, sodass Sie die Modul-API und möglicherweise die Struktur / das Paradigma des Programms mithilfe des zu portierenden Moduls ändern müssen.Wenn Sie weitere Details zu den
fcntl
Anrufen angeben, können Benutzer Windows-Entsprechungen finden.quelle
Das fcntl-Modul wird nur zum Sperren der Pinning-Datei verwendet. Wenn Sie also keinen Mehrfachzugriff versuchen, kann dies eine akzeptable Problemumgehung sein. Platzieren Sie dieses Modul in Ihrem
sys.path
und es sollte nur als offizielles fcntl-Modul funktionieren.Versuchen Sie, dieses Modul nur in Windows für Entwicklungs- / Testzwecke zu verwenden.
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
quelle
Obwohl dies nicht sofort hilft, gibt es eine Alternative, die sowohl mit Unix (fcntl) als auch mit Windows (win32-API-Aufrufe) funktioniert : portalocker
Es beschreibt sich selbst als plattformübergreifende (posix / nt) API für das Sperren von Flock-Dateien für Python. Grundsätzlich werden fcntl Win32-API-Aufrufen zugeordnet.
Der ursprüngliche Code unter http://code.activestate.com/recipes/65203/ kann jetzt als separates Paket installiert werden - https://pypi.python.org/pypi/portalocker
quelle
fcntl
macht viel mehr als nur Dateien sperren.