Во-первых, это, вероятно, не будет работать для вас.
Вы не можете включить Windows в Linux, просто добавив модули в свою библиотеку Python. Причина, по которой на вашем пути нет модуля fcntl
, заключается в том, что fcntl
не включен в Windows. И причина, по которой он не включен в Windows, заключается в том, что ОС Windows не поддерживает системные вызовы, которые обертывают модуль, или что-то достаточно близкое, чтобы разумно эмулировать эти системные вызовы.
Если у вас есть код, требующий fcntl
, этот код не может быть запущен в Windows (если вы не проделали значительную работу по его переносу, чтобы не требовать fcntl
в первую очередь).
Если у вас есть код, который не требует fcntl
, но использует его в любом случае, или если вам просто нужно что-то для временных целей разработки, чтобы вы могли перехватывать и исправлять ошибки общего доступа к файлам при переносе кода на не требуется fcntl
, тогда вы можете использовать фиктивный код msoliman, который я объясню, как это сделать ниже. Но вы, кажется, ожидаете, что это сделает магию, и это не сделает это.
Возможно, вы не уверены. Возможно, вы используете код, который использует другой код, который использует другой код, который использует fcntl
в некоторых сценариях, но не в других, на самом деле может не потребоваться fcntl
для выполнения каких-либо действий, которые вы на самом деле пытаетесь сделать с ним.
Если вы хотите проверить это, вы можете взять фиктивный код msoliman и изменить каждое тело функции на следующее:
raise RuntimeError('Oops, using fcntl!')
Затем запустите программу и посмотрите, не выйдет ли она из-за этой ошибки. Если нет, то вам на самом деле не нужно fcntl
в конце концов. (Или, по крайней мере, он вам не нужен ни для одной из проверенных вами функций - всегда возможно, что вам понадобится другая вещь, которую вам нужно сделать с приложением, которое, как вы думали, не тестировалось).
Если вашему коду действительно требуется fcntl
, и вы не хотите / не можете портировать этот код на код Windows, который использует вызовы Win32 API (или кросс-платформенную библиотеку, такую как portalocker
), то что вы вероятно, нужно сделать, это установить Linux и запустить программу там.
Существует несколько способов запуска Linux поверх Windows, а не вместо Windows. Например, вы можете установить Docker для Windows , а затем создать контейнер для установки linux с приложением. Или вы можете использовать VMWare Player , чтобы, по сути, запустить образ Linux как приложение под Windows, а затем выполнить свою работу внутри этого образа. И так далее.
Наконец, msoliman "Поместите этот модуль в вашу PYTHONPATH" немного вводит в заблуждение.
Что вам действительно нужно сделать, так это вставить в ваш sys.path
. PYTHONPATH
- это всего лишь один из способов сделать это, и, вероятно, не тот, который вам нужен здесь.
Варианты:
- Просто поместите его в тот же каталог, что и ваш скрипт. Как сказано в документации: «Как инициализируется при запуске программы, первый элемент этого списка,
path[0]
, является каталогом, содержащим скрипт, который использовался для вызова интерпретатора Python.»
- Поместите его в пакеты вашего пользовательского или системного сайта или в другой каталог, который уже используется по умолчанию
sys.path
. Вы можете import sys; print(sys.path)
получить список этих каталогов. Если вы видите что-то в своем домашнем каталоге, это хорошее место для размещения; если нет, найдите что-нибудь с site-packages
в названии.
- Поместите его в какой-нибудь другой каталог и задайте для переменной среды
PYTHONPATH
полный путь к каталогу. Вы можете установить переменную среды в командной строке Windows cmd
, написав SET PYTHONPATH C:\Path\To\Directory
. Это будет сохраняться только в течение текущего окна командной строки. Если вы хотите установить его постоянно, где-то на панели управления есть настройка (она меняется с каждой версией Windows; у суперпользователя должны быть хорошие актуальные ответы для каждой версии), где вы можете установить переменные среды System и User. Любая переменная среды пользователя вступает в силу в каждом новом окне командной строки, которое вы открываете с этого момента.