微软Windows操作系统Python-3.6 PyCrypto安装错误

44

pip install pycrypto 可以在 Python3.5.2 上正常工作,但在 Python3.6 上会出现以下错误:

inttypes.h(26): error C2061: 语法错误: 标识符 'intmax_t'

9个回答

75
在Python安装目录下的包含\pyport.h文件不再有#include <stdint.h>,这使得intmax_t未定义。
对于Microsoft VC编译器的解决方法是通过操作系统环境变量CL强制包含stdint.h:
  1. 打开命令提示符
  2. 通过运行vcvars*.bat(根据VC版本和架构选择文件名)设置VC环境
  3. set CL=-FI“Full-Path\stdint.h”(使用实际值替换环境中的Full-Path)
  4. pip install pycrypto

10
为什么这个补丁没有被加入到 Windows Python 发行版中?记录一下,我能够使用 vcvarsall.bat C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat - CMCDragonkai
2
问题已在 https://github.com/dlitz/pycrypto/issues/221 上报。问题出在 pycrypto 本身,它提供了一个不完整的 stdint.h,我已经在该错误报告中添加了所需修复的说明。 - Paul Moore
6
对我来说,步骤1和步骤2可以简化为:从开始菜单中运行“Visual C++ 2015 x86本机生成工具命令提示符” - akavel
2
如果您使用 VS 2017 构建它,则应修改头文件位置如下:set CL=-FI"%VCINSTALLDIR%\Tools\MSVC\14.16.27023\include\stdint.h - 当然,14.16.27023 数字取决于 VS 版本,我的是 15.9。 - Kajsa Gauza
1
这个方法适用于我在Windows 10上使用Visual Studio 2019(又名Visual Studio 14),使用set CL=-FI"%VCINSTALLDIR%\include\stdint.h" - Stefan
显示剩余7条评论

37

我已经成功在Windows 10、Visual Studio 2017、Python 3.6上安装了pycrypto 2.6.1。

  1. 在开始菜单中使用管理员权限打开“x86_x64 Cross-Tools Command Prompt for VS 2017”。

  2. set CL=-FI"%VCINSTALLDIR%Tools\MSVC\14.11.25503\include\stdint.h"

  3. pip install pycrypto

输入图像描述


7
最终的解决方案!!只需确保检查MSVC文件夹的实际版本,我使用的是“14.12.25827”。谢谢老兄。 - pagep
1
谢谢@Marko :-) 对我来说,这三个命令起作用了。 1. C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build>vcvarsx86_amd64.bat 2. set CL=-FI"%VCINSTALLDIR%Tools\MSVC\14.16.27023\include\stdint.h" 3. pip install pycrypto==2.6.1 - dinu0101
1
我在考虑给这个人捐赠PayPal按钮。 - Roberth Solís

23

这在PowerShell中有所帮助,但是我还需要Visual Studio无法构建由于rc.exe以便链接成功。 - Jari Turkia
Visual Studio 2017构建工具,而在我的情况下,VCINSTALLDIR位于VC\Tools\MSVC\14.16.27023。 - Doogle

16

请使用PyCryptodome代替pycrypto。pycrypto已经停止维护,不再得到支持。 PyCryptodome几乎与pycrypto()暴露出几乎相同的API。


这个问题是关于编译问题以及应该使用什么代替的。 - Konstantin Glukhov

6

我已经成功在Windows 10操作系统的Python 3.6上安装了Pycrypto 2.6.1。

  1. 设置以下环境变量。 visual studio installed directory
  2. 打开cmd.exe命令行工具
  3. 激活虚拟环境
  4. 从GitHub下载Pycrypto 2.6.1并解压缩。
  5. 为Pycrypto设置环境变量 set CL=/FI"%VCINSTALLDIR%\\INCLUDE\\stdint.h" %CL%
  6. 运行以下安装命令 python setup.py install
  7. 这是我的结果 enter image description here

如果有人需要帮助,我会很高兴能够提供帮助。


它与原始答案有何不同? - Konstantin Glukhov
@user1602,您不必按照原始答案中的以下步骤操作:
  1. 以管理员权限打开命令提示符
  2. 从您的VC版本运行vsvars32.bat
- user1960422
在你的情况下,你手动设置了VCINSTALLDIR,而我是通过vsvars32.bat来设置的。最终,你建议的解决方案与我的相同。 - Konstantin Glukhov

3

对于遇到与我相同情况的人:

环境

  • Windows 10企业版v10.0.18363 Build 18363
  • Python 3.8

步骤

  1. https://visualstudio.microsoft.com/visual-cpp-build-tools/下载Microsoft C++ Build Tools
  2. 运行上述安装程序并安装默认组件
    • MSVC v142 - VS 2019 C++ x64/x86构建工具
    • Windows 10 SDK
    • C++ CMake工具 for Windows
    • 测试工具核心功能 - 构建工具
    • C++ AddressSanitizer(实验性)
  3. 重新启动电脑
  4. 开始菜单 > x64 Native Tools Command Prompt for VS 2019,会弹出一个cmd窗口
  5. 执行 set CL=-FI"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.27.29110\include\stdint.h"
  6. 在cmd窗口中运行pip install pycrypto(可能需要管理员权限)

为2022 x64用户节省宝贵的1分钟:set CL=-FI"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\stdint.h" - undefined

2
  • 卸载当前的Python版本

  • 安装适用于amd64架构的Python

  • 按照其他被接受的解决方案进行操作:

    • 打开“x86_x64 Cross-Tools Command Prompt for VS 2017”
    • 添加新的环境变量,指向你的Visual Studio MSVC安装路径
    • set CL=-FI"%VCINSTALLDIR%Tools\MSVC\14.11.25503\include\stdint.h"
    • pip install pycrypto

0
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build>vcvars64.bat

** Visual Studio 2019 开发人员命令提示符 v16.11.14 ** 版权所有 (c) 2021 Microsoft Corporation ********************************************************************** [vcvarsall.bat] 环境已初始化: 'x86_x64'

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools>set CL=-FI"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\stdint.h"

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools>pip install pycrypto 正在收集 pycrypto 使用缓存 pycrypto-2.6.1.tar.gz (446 kB) 正在准备元数据 (setup.py) ... 完成 已收集 pycrypto 的 wheel 包: - pycrypto-2.6.1-cp39-cp39-win_amd64.whl 正在构建 wheel for pycrypto (setup.py) ... 完成 已创建 wheel for pycrypto: 文件名=pycrypto-2.6.1-cp39-cp39-win_amd64.whl 大小=528832 sha256=250926fc0e06b4c1ed9c2fb16ad9b4723984ef68c1e5383b26c974235536a0ae 已存储于目录: c:\users\volka\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local\pip\cache\wheels\9d\29\32\8b8f22481bec8b0fbe7087927336ec167faff2ed9db849448f 成功构建 pycrypto wheel 包 安装已收集的包: pycrypto 成功安装 pycrypto-2.6.1

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools>


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

对我来说,这样修复了它:

使用Python 2,我有

sudo apt-get install python-dev  \
     build-essential libssl-dev libffi-dev \
     libxml2-dev libxslt1-dev zlib1g-dev \
     ...

使用Python 3,我需要

sudo apt-get install python3 python-dev python3-dev \
     build-essential libssl-dev libffi-dev \
     ...

对于我来说,安装python-dev python3-dev就解决了这个问题!


2
这是Windows平台的问题,与Ubuntu无关。你的回答在这里不相关。 - Konstantin Glukhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接