PyNaCl 构建问题

如何解决PyNaCl 构建问题

所以我试图用 pip 将 discord 的 API 下载到我的 venv 中,但它无法构建 pynacl。它说错误是PATH中缺少'make'实用程序,但我只是将它添加到我的环境变量中并尝试在cmd上运行它以确保它正确安装。关于可能导致问题的原因有什么想法吗?

我正在运行 Windows 10、python 3.9.1 和 pip 20.3.3 Here is the error message:

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

解决方法

PATH 中缺少“make”实用程序


这个错误的原因

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

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

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

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


安装 PyNacl

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

  • 您也可以手动下载 PyNaCl-1.4.0-cp35-abi3-win_amd64.whlpip 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)。

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

然后 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")

并且函数 which 是通过一个BUG 实现的:

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”将在第一次迭代中“耗尽”。您可以将 filter(...) 替换为 list(filter(...)) 来修复它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?