Проблемы сборки PyNaCl

Итак, я пытаюсь загрузить API Discord в свой venv с помощью pip, но не может создать PyNaCl. В нем говорится, что ошибка заключается в том, что утилита make отсутствует в PATH, но я просто добавил ее в свои переменные среды и попытался запустить ее в cmd, чтобы убедиться, что она правильно установлена. Есть идеи о том, что может вызвать проблему?

Я запускаю windows 10, python 3.9.1 и pip 20.3.3Вот сообщение об ошибке:

Примечание: я могу прекрасно установить модуль Discord без голосовой поддержки, однако я хочу использовать его голосовые функции и не могу понять, почему он не устанавливается.

1 ответ

Утилита make отсутствует в PATH

Эта ошибка вызвана виде с помощью BUG с в setup.py исходного кода PyNacl.

Однако, даже если вы исправите это, вы столкнетесь с большей проблемой, поскольку этот исходный код не предназначен для создания в Windows.

Если вы просто хотите установить PyNacl, см. Следующий раздел.

Если вы хотите узнать подробности этой ОШИБКИ , см. Последний раздел.


После 14 сентября 2020 года pynacl будет иметь предварительно созданное колесо abi3, поэтому «pip install pynacl» автоматически загрузит и установит его. Вам не нужно самостоятельно создавать pynacl.

Или вы можете вручную загрузить PyNaCl-1.4.0-cp35-abi3-win_amd64.whl и «pip install PyNaCl-1.4.0-cp35-abi3-win_amd64.whl» (в каталоге загрузки).

В случае ошибки вы можете использовать «pip install -U pip» для обновления pip и повторить попытку.

Если по-прежнему ошибка, вы можете использовать "pip debug -v" для проверки совместимости тегов:

Если совместимые теги имеют постфикс "win_amd64", должен быть тег "cp35-abi3-win_amd64" и установка pip должна завершиться успешно.

Если совместимые теги имеют постфикс «mingw_x86_64» или «mingw_x86_64_ucrt», вы должны собрать pynacl самостоятельно (или установить win_amd64 python).

К счастью, вам не нужно создавать libsodium(который требует "make" и вызывает ошибку, с которой вы сталкиваетесь).

Вы можете загрузить предварительно собранную библиотеку libsodium с https://download.libsodium.org/libsodium/releases/ .

скачать: https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-mingw.tar.gz

разархивируйте .gz (вы можете использовать 7-zip или peazip) и скопируйте каталоги («bin», «lib», «include») в /libsodium-1.0.18-stable-mingw.tar/libsodium-win64 в свой mingw каталог установки (который также содержит "bin", "lib", "include")

наконец, используйте bash (например, git bash):

      SODIUM_INSTALL=system pip install pynacl

тогда pip будет использовать PEP517 для сборки и установки pynacl с предварительно созданной библиотекой libsodium. Или вы можете собрать самостоятельно (загрузите исходный код из pypi и в каталоге исходного кода):

      SODIUM_INSTALL=system python setup.py bdist_wheel

С cmd или powershell вы не можете установить переменную среды в стиле bash. Вместо этого вы можете использовать следующее:

      $env:SODIUM_INSTALL="system";pip install pynacl

Здесь возникает ошибка:

      if not which("make"):
        raise Exception("ERROR: The 'make' utility is missing from PATH")

И функция "который" реализована с ОШИБКОЙ :

      def which(name, flags=os.X_OK):  # Taken from twisted
result = []
exts = filter(None, os.environ.get('PATHEXT', '').split(os.pathsep))
path = os.environ.get('PATH', None)
if path is None:
    return []
for p in os.environ.get('PATH', '').split(os.pathsep):
    p = os.path.join(p, name)
    if os.access(p, flags):
        result.append(p)
    for e in exts:
        pext = p + e
        if os.access(pext, flags):
            result.append(pext)
return result

В Python3 фильтр возвращает итератор, а не список (фильтр python2 возвращает список). Таким образом, на первой итерации «exts» будут «исчерпаны». Вы можете заменить «фильтр (...)» на «список (фильтр (...))», чтобы исправить это.

Другие вопросы по тегам