pycrypto 安装:配置错误:无法运行 C 编译的程序

use*_*261 5 python paramiko mingw32 pycrypto

请对我温柔点。我已经搜索过该网站,我知道这个确切问题还有另一个答案,但是发布在那里的答案对我不起作用。

我正在尝试安装pycrypto,以便我可以开始paramiko工作。 Paramiko由于缺少pycrypto模块而失败。我试过使用pip install pycryptowhich 成功,但没有解决问题。

我试过安装二进制版本pycrypto,但没有解决问题。

现在我正在尝试构建pycrypto. 我有cygwin64mingw安装在我的机器上。最远的方法是

python setup.py build --compiler=mingw32
Run Code Online (Sandbox Code Playgroud)

这会出错,

checking whether we are cross compiling... configure: error: in `/cygdrive/c/Python27/pycrypto-2.6.1':
configure: error: cannot run C compiled programs.
Run Code Online (Sandbox Code Playgroud)

另一个答案建议删除路径中的空格。我曾尝试将路径简化为简单

c:\mingw;c:\python2.7;c:\cygwin64\bin
Run Code Online (Sandbox Code Playgroud)

结果没有改变?

有没有人可以指点我的解决方法?谢谢你。总体目标是开始paramiko工作。该paramiko错误是

ImportError: No module named Crypto.PublicKey
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 6

就我而言,/tmp挂载点是用noexec标志挂载的。

对于带有 cygwin 的 Windows,我也会检查挂载点,以及依赖项,例如vcredistpython2 和 python3 所需的包,另请参阅构建/安装 Python 2.7 的 C 模块时的错误

linux的两种解决方案:

  • 使用 exec 标志临时重新挂载(很可能需要 root/sudo 权限)

例如:

sudo mount -o remount,rw,exec /tmp
Run Code Online (Sandbox Code Playgroud)
  • 将构建路径更改为本地挂载点

例如:

mkdir -p ~/python/tmp
pip install --build ~/python/tmp pycrypto
Run Code Online (Sandbox Code Playgroud)

注意:值得一看其他答案:

  • 验证autoconf和/python2-devpython3-dev软件包已安装。


sds*_*sds 5

我有一个类似的问题:

pip install --upgrade subprocess32
Run Code Online (Sandbox Code Playgroud)

失败了

configure: error: cannot run C compiled programs
Run Code Online (Sandbox Code Playgroud)

aws我们的管理员收紧设置并安装tmpfsnoexec选项后。

解决方案是

TMPDIR=/var/tmp pip install --upgrade subprocess32
Run Code Online (Sandbox Code Playgroud)


ros*_*idh 0

我在 Chrubuntu 14.04 中遇到了同样的问题,并通过首先执行以下操作解决了它:

apt-get install python-dev
Run Code Online (Sandbox Code Playgroud)

...修复与头文件有关的问题,然后:

pip install pycrypto
Run Code Online (Sandbox Code Playgroud)

...用paramiko解决实际问题。但是,然后 paramiko 对 ecdsa 出现了问题,“pip install paramiko”表示一切都已安装,没问题,所以我执行了“pip uninstall paramiko”,然后执行“pip install paramiko”,现在我可以在 python 中导入 paramiko没有问题。

可能有一种更优雅的方法来解决最后一点,但这对我来说已经足够好了。