首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyNaCl构建问题

PyNaCl构建问题
EN

Stack Overflow用户
提问于 2020-12-31 14:42:38
回答 1查看 341关注 0票数 0

所以我尝试用pip将discord的API下载到我的venv中,但是它无法构建PyNaCl。它说错误是PATH中缺少' make‘实用程序,但我只是将它添加到我的环境变量中,并尝试在cmd上运行它,以确保它已正确安装。你知道是什么导致了这个问题吗?

我运行的是Windows10、Python3.9.1和pip 20.3.3 Here is the error message:

注意:我可以在没有语音支持的情况下完美地安装discord模块,但是,我想要使用它的语音功能,我不明白为什么它无法安装。

EN

回答 1

Stack Overflow用户

发布于 2021-08-07 16:31:58

路径中缺少

'make‘实用工具

此错误的原因

此错误是由setup.py of PyNacl源代码中的错误引起的。

但是,即使您修复了它,您也会遇到更多问题,因为源代码并不打算在windows上构建。

如果您只想安装PyNacl,请参阅下一节。

如果您想了解错误的详细信息,请参阅最后一节。

安装PyNacl

在2020年9月14日之后,pynacl预置了abi3轮子,因此pip install pynacl会自动下载并安装它。您不需要自己构建pynacl

  • 如果出现错误,可以使用pip install -U pip升级pip,然后重试。

  • 如果仍然出现错误,可以使用pip debug -v检查兼容的标记:

  • 如果兼容的标记有"win_amd64“后缀,则应该有一个”cp35-abi3 3-win_AMD64“标记,pip install应该会成功。

  • 如果兼容的标记带有"mingw_x86_64“或"mingw_x86_64_ucrt”后缀,则必须自己构建pynacl (或安装win_amd64 python)。

pynacllibsodium列为依赖项。幸运的是,您不需要构建libsodium (它需要make,这会导致您遇到的错误)。

您可以从https://download.libsodium.org/libsodium/releases/.下载预构建的

  • 解压包含(您可以使用7- .gz或peazip),并将.gz中的目录("bin“、"lib”、“mingw”)复制到您的mingw安装目录(也包含"bin“、"lib”、“

”)

最后,使用

  • (比如git bash):SODIUM_INSTALL=system pip install pynacl.

然后,pip将使用PEP517通过预置的libsodium为您构建和安装pynacl。或者,您可以自己构建(从pypi下载源代码,并在源代码目录中):

代码语言:javascript
复制
SODIUM_INSTALL=system python setup.py bdist_wheel

使用cmd或powershell时,您不能在bash样式中设置环境变量。您可以改用以下命令:

代码语言:javascript
复制
$env:SODIUM_INSTALL="system";pip install pynacl

bug的详细信息

错误出现在这里:

代码语言:javascript
复制
if not which("make"):
    raise Exception("ERROR: The 'make' utility is missing from PATH")

函数which是用一个BUG实现的

代码语言:javascript
复制
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返回迭代器,而不是list (python2的filter返回list)。因此,"exts“将在第一次迭代中”耗尽“。您可以用list(filter(...))替换filter(...)来修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65517524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档