python ssh 安装

最近想做一个python的linux文件比较工具

要用到ssh功能,希望直接使用python的ssh client而不是使用 expect之类的工具


安装ssh扩展花费了不少时间,目前实验成功了win32的版本。。把要点记录下来,供大家分享。


关于python的ssh有如下几种 :

参考:http://wiki.python.org/moin/SecureShell

目前比较活跃的是就是 http://pypi.python.org/pypi/ssh - in pypi as ssh


如果直接下载ssh模块编译,安装完import ssh的时候会提示找不到Crpyto

需要安装pycrypto 2.6,而使用python setup.py install 安装会提示没有 gmp 库,编译这个就麻烦了。。。


只能通过python自己的disttools来帮忙编译,然后使用mingw32 自己生成安装包,就不用在所有机器上都编译一次了,直接执行安装包就好了。

编译参考如下

http://www.razorvine.net/blog/user/irmen/article/2009-12-05/166


执行 

   python setup.py build -c mingw32

   python setup.py bdist_wininst

在dist目录下会生成 exe,安装后就可以了


win 7 64bit 生成如下:

 

http://yorickdowne.wordpress.com/2010/12/22/compiling-pycrypto-on-win7-64/

 

Preparing to compile:

  • Install VC++ 2008 SP1 Express. Needs to be 2008, not 2010 – that goes back to an old tradition that modules need to be compiled with the version that Python was compiled with, which happens to be 2008 right now. The Express version of VC++ 2008 is still available: http://www.microsoft.com/express/Downloads/#2008-Visual-CPP. If you are nervous about whether it will remain available, download the ISO.
  • Python 2.7.1 has a bug where it will get confused with the paths that MS use for Express, which happen to be different than the paths used in Pro, which breaks vcvarsall.bat when attempting to build 64-bit binaries. This is a limitation of VC++ 2008 Express. The Python distutils team offers a work-around. Check the bug athttp://bugs.python.org/issue7511 to see whether the issue has been resolved already in your version of Python. If not so, grab the diff attached to that bug report and apply it to your Python main directory using “patch”. The command line for this is “patch -p0 <vcvars4.diff”.
    If you don’t have a copy of “patch” already, the Cygwin default install + patch (not patchutils) will give you patch.

Now you’re ready to compile. This is pretty simple from here on out:

  • pycrypto should be unpacked somewhere other than your Python dir, say c:\temp
  • Then, from within the pycrypto directory, run these commands:
    • python setup.py build -c msvc (编译的时候会遇到 unistd.h 等两个 头文件不在,直接到python目录下注释掉就好了。。)
    • python setup.py install
    • python setup.py test

最后成功生成 pycrypto amd64的安装包。。其他的就跟这个一样了

 

win 7 如果没有安好 vc的话,会有如下错误,乱七八糟的。。。

E:\dev\python\soft\pycrypto-2.6>C:\MinGW\bin\gcc.exe -shared -s build\temp.win-amd64-2.7\Release\src\winrand.o build\temp.win-amd6
4-2.7\Release\src\winrandom.def -Lc:\python27\libs -Lc:\python27\PCbuild\amd64 -lpython27 -o build\lib.win-amd64-2.7\Crypto\Random
\OSRNG\winrandom.pyd
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x4c): undefined reference to `_imp__PyArg_ParseTupleAndKeywords'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x90): undefined reference to `_imp___PyObject_New'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0xce): undefined reference to `_imp__PyExc_SystemError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0xd9): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x139): undefined reference to `_imp__PyArg_ParseTuple'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x163): undefined reference to `_imp__PyMem_Malloc'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1ac): undefined reference to `_imp__PyString_FromStringAndSize'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1b9): undefined reference to `_imp__PyMem_Free'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1d9): undefined reference to `_imp__PyExc_TypeError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1e4): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x206): undefined reference to `_imp__PyExc_SystemError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x211): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x21a): undefined reference to `_imp__PyMem_Free'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x22a): undefined reference to `_imp__PyErr_NoMemory'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x239): undefined reference to `_imp__PyExc_ValueError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x244): undefined reference to `_imp__PyErr_SetString'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x288): undefined reference to `_imp__Py_FindMethod'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x29c): undefined reference to `_imp__PyInt_FromLong'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2b1): undefined reference to `_imp__PyExc_TypeError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2bc): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2e6): undefined reference to `_imp__PyExc_TypeError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2f1): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x322): undefined reference to `_imp__PyObject_Free'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x33e): undefined reference to `_imp__PyExc_SystemError'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x349): undefined reference to `_imp__PyErr_Format'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x356): undefined reference to `_imp__PyType_Type'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x388): undefined reference to `_imp__Py_InitModule4'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x3a3): undefined reference to `_imp__PyModule_AddIntConstant'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x4cf): undefined reference to `_imp__PyModule_AddStringConstant'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x555): undefined reference to `_imp__PyErr_Occurred'
build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x566): undefined reference to `_imp__Py_FatalError'
collect2: ld returned 1 exit status

E:\dev\python\soft\pycrypto-2.6>python setup.py bdist_wininst
running bdist_wininst
running build
running build_py
running build_ext
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
building 'Crypto.Random.OSRNG.winrandom' extension
Traceback (most recent call last):
  File "setup.py", line 456, in <module>
    core.setup(**kw)
  File "c:\python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "c:\python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "c:\python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\python27\lib\distutils\command\bdist_wininst.py", line 131, in run
    self.run_command('build')
  File "c:\python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "c:\python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "c:\python27\lib\distutils\command\build.py", line 127, in run
    self.run_command(cmd_name)
  File "c:\python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "c:\python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "setup.py", line 253, in run
    build_ext.run(self)
  File "c:\python27\lib\distutils\command\build_ext.py", line 339, in run
    self.build_extensions()
  File "setup.py", line 150, in build_extensions
    build_ext.build_extensions(self)
  File "c:\python27\lib\distutils\command\build_ext.py", line 448, in build_extensions
    self.build_extension(ext)
  File "c:\python27\lib\distutils\command\build_ext.py", line 498, in build_extension
    depends=ext.depends)
  File "c:\python27\lib\distutils\msvc9compiler.py", line 473, in compile
    self.initialize()
  File "c:\python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
  File "c:\python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsall
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

      

http://www.velocityreviews.com/forums/t867906-pycrypto-builds-neither-with-msvc-nor-mingw.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值