#python-3.x #pip #discord.py #pynacl
#python-3.x #pip #discord.py #pynacl
Вопрос:
Итак, я пытаюсь загрузить API discord в свой venv с помощью pip, но ему не удается собрать PyNaCl. В нем говорится, что ошибка заключается в том, что утилита ‘make’ отсутствует в PATH, но я просто добавил ее в свои переменные среды и попытался запустить ее в cmd, чтобы убедиться, что она установлена правильно. Есть идеи о том, что может быть причиной проблемы?
Я использую Windows 10, python 3.9.1 и pip 20.3.3, вот сообщение об ошибке:
Примечание: Я могу отлично установить модуль discord без голосовой поддержки, однако я хочу использовать его голосовые функции, и я не могу понять, почему он не устанавливается.
Ответ №1:
утилита ‘make’ отсутствует в PATH
Причина этой ошибки
Эта ошибка вызвана ОШИБКОЙ в setup.py
PyNacl
исходном коде.
Однако, даже если вы это исправите, вы столкнетесь с еще большей проблемой, поскольку этот исходный код не предназначен для сборки в Windows.
Если вы просто хотите установить PyNacl
, смотрите Следующий раздел.
Если вы хотите узнать подробности об этой ОШИБКЕ, см. Последний раздел.
Установка 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 install
он должен быть успешным. - Если совместимые теги имеют постфикс «mingw_x86_64» или «mingw_x86_64_ucrt», вы должны выполнить сборку
pynacl
самостоятельно (или установить win_amd64 python).
pynacl
списки libsodium
как зависимость. К счастью, вам не нужно строить 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», «включить») - наконец, используйте bash (например, git bash):
SODIUM_INSTALL=system pip install pynacl
.
Затем pip будет использовать PEP517 для сборки и установки pynacl
для вас с помощью pre-built 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")
И функция which
реализована с ОШИБКОЙ:
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 filter
возвращает итератор, а не a list
(python2 filter
возвращает a list
). Таким образом, «exts» будут «исчерпаны» на первой итерации. Вы можете заменить filter(...)
на list(filter(...))
, чтобы исправить это.