Проблемы сборки 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» будут «исчерпаны». Вы можете заменить «фильтр (...)» на «список (фильтр (...))», чтобы исправить это.