Mac上实现对Python的版本切换
最近朋友邀请我帮忙写个比特币自动化交易程序,要求的平台是Okex,用Python写,之前到是自己学过一点自动化交易,不过是MT5的。看了一下Okex提供的API接口,和MT5不一样,它并没有现成的IDE,只提供接口,而且我之前也没接触过Python,出于试一试的心态,我试着用Python来运行下Okex的示例程序,果然掉进了大坑,费了半天才搞定,看样子自己的基础知识还是不够扎实,我把自己的经历详细写上来,希望能为后人带来点帮助吧。
首先,通过搜索,我找到了一篇感觉不错的OKEX的量化交易入门教程博客:https://blog.csdn.net/hellocsz/article/details/81535191
嗯,考虑到没接触过python,按文中推荐的书,去下了份盗版的“python编程从入门到实践”,别的不说,它对环境的配置讲得还挺详细的,先好评一个。MAC默认安装了Python 2.x的版本,但仔细一看,发现OKEX提供API居然要Python3.4或以上的版本才能用。。。
好在书里详细地讲述了该怎么装Python3,我复述一下步骤吧:
1.先安装Homebrew,这个直接按书中操作即可,我没有碰到问题,注意,书中的xcode-select --install是要你安装xcode的命令行工具,不是安装xcode,不用特意去装个xcode(虽然MAC的开发人员一般都会装),
2.安装Python3,也是傻瓜式操作,我没有碰到问题,略过。
3.安装个文本编辑器,方便Python编程,书里推荐了Sublime Text,不错不错,一条龙服务啊,果断安装,还是傻瓜式的,我喜欢。
按照书里教的打了个helloworld,没问题,正常输出,可以使用了!
好,继续按上面的博客说的做,去官网申请个API key,简单,没难度,对了,我选的权限是只读 提币 交易全选的,反正自己的账户钱也不多,先试试吧。
随后博客说API文档里还能看到代码示例,有四个后缀为py的文件(Client,httpMD5Util,OkcoinFutureAPI,OkcoinSpotAPI),找了半天,没有。百度,关键词:okex自动化交易,翻了几个博客,找到个Github上的站点:https://github.com/okcoin-okex/API-docs-OKEx.com
点进去,看到代码示例四个大字没,点进去,嗯,分了REST API和WebSocket API两种啊,之前的博客提到的似乎是第一种,点进去,点python,出现了5个文件,1个ReadMe帮助,4个正好是要找的后缀为py的Client,httpMD5Util,OkcoinFutureAPI,OkcoinSpotAPI,棒!搞下来,放一个文件夹。
博客里说Client是主程序,好,那就用Sublime Text打开它,先给爸爸看看效果,点击Tools->build,我TM就知道,果然报错了。。。(注意,这里apikey和secretkey要打入自己注册的API key和passphase)

又到了最快乐的解题时间,那么问题在哪?看了下,ImportError:No module named http.client是吧?百度,stack over flow,复制问题搜索下,看看有没有解决方案。哟,第一个就是,不错不错,进展挺顺利啊,https://stackoverflow.com/questions/12058647/selenium-no-module-named-http-client,一看答复,嗯?这个人说自己之前装了python3,然后装python2的时候没有覆盖安装,所以。。。
可是我就要python3.4以后的版本啊,这啥玩意,差评。继续百度,20分钟过去了,嗯,没有进展,这些人都在瞎扯啥,一个能用的方案都没有。。。
唉还是要爸爸亲自出马啊,我想想,之前测试helloworld也没报错啊,那应该不是python不能用,仔细看下错误信息,from OKcoinSpotAPI import OKCoinSpot报错了,看起来应该是从OKcoinSpotAPI.py导入OKCoinSpot,进OKcoinSpotAPI.py看下,发现OKCoinSpot是里面定义的一个类,这应该没错,再看OKcoinSpotAPI.py里有from HttpMD5Util import buildMySign,httpGet,httpPost,进HttpMD5Util.py看看,咦,有个import http.client,嗯,应该就是这里错了,找不到这个模块,下载下来的文件里没有叫http的,这应该是系统自带的网络通信库了,可自带的怎么会找不到呢?之前stack over flow上那个答案提到了python3,那是不是两个版本冲突了?因为我有两个版本的python呢,python3库名改了也许就会报错,百度一下得到了答案,因为python2.x的版本中http库和python3.x版本的名字是不一样的,http是python3.x中的网络通信库的名字,那就是说我在Sublime Text编译的时候用的是Python2.x的版本咯?按照那本书里的说法,通过命令行使用python3时只要把命令中的python换成python3就行了,那么试一下吧:
命令行中,先进入到Client所在目录,执行python Client.py,嗯,报错了,结果如下:

和之前的问题一样,这符合我们的预期,说明之前的错误很有可能是因为Sublime Text编译的时候用了Python2.x的版本。
试一下执行python3 Client.py(注意,这时我已经把apikey和secretkey打进去了,你要是只想测试,可以先不打,先全部注释,只留最顶上一行:
from OkcoinSpotAPI import OKCoinSpot,看编译后有没有报错),结果如下:

显然程序运行成功了,下面是获取的数据,这进一步说明之前报错是因为python运行的版本不对。
那么问题肯定是出在Sublime Text上了,它肯定编译的时候默认用了Python2.x的版本。继续百度,哦
Mac上实现对Python的版本切换的更多相关文章
- Mac上python2和python3的版本切换
在命令行执行 vi ~/.bash_profile 在文件下面加上: alias python2='/system/Library/Frameworks/Python.framework/Versio ...
- Python默认版本切换
Mac上自带python2.7 版本,但是我又下了一个3.7版本(下载的版本默认安装在 /Library/Frameworks/Python.framework/Versions/3.7/bin/py ...
- 一文彻底解决Ubuntu上PHP的安装以及版本切换
Ubuntu上官方的源,比如 Ubuntu14.04 默认源中的是 PHP5.6.x.Ubuntu16.04 默认源中的是 PHP7.0.x,那么如果想在 Ubuntu16.04 上安装 PHP7.1 ...
- Mac 上Python多版本切换
Mac上自带了Python2.x的版本,有时需要使用Python3.x版本做开发,但不能删了Python2.x,可能引起系统不稳定,那么就需要安装多个版本的Python. 1.安装Python3.x版 ...
- Python不同版本切换
2016年6月8日更新: 这是我早前写的一篇小文章,其实,后来也没有采用这种方法切换.电脑上安装了多个Python 版本,保证自己经常用的版本加入环境变量外,使用非系统的版本时一般使用 IDE 编辑器 ...
- python多版本切换
环境:Macbook MacOS自带的python2.7,在命令行中输入python后会显示2.7版本 如何切换成新版本? 一.修改用户配置环境变量~/.bash_profile 确定新版本的安装位置 ...
- MAC下 JDK环境配置、版本切换以及ADB环境配置
网上方法,自己总结:亲测可行! 一.JDK环境配置.版本切换: 通过命令’jdk6′, ‘jdk7′,’jdk8’轻松切换到对应的Java版本: 1.首先安装所有的JDk:* Mac自带了的JDK6, ...
- Linux下python默认版本切换成替代版本
本文链接自http://www.myhack58.com/Article/48/66/2016/71806.htm 当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Pyt ...
- 将Linux下python默认版本切换成替代版本
本文链接自http://www.myhack58.com/Article/48/66/2016/71806.htm 当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Pyt ...
随机推荐
- NSPredicate过滤数组数据
NSPredicate编写软件时,经常需要获取一个对象集合,然后删除不满足条件的对象,保留符合条件的对象,从而提供一些有意义的对象.Cocoa提供了一个名为NSPredicate的类,他用于指定过滤器 ...
- 团体程序设计天梯赛L1-024 后天 2017-03-22 17:59 68人阅读 评论(0) 收藏
L1-024. 后天 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 如果今天是星期三,后天就是星期五:如果今天是星期六,后天就 ...
- 解决NIOS II工程移动在磁盘上位置后project无法编译问题
说明:本文档于2017年3月4日由小梅哥更新部分内容,主要是增加了讲解以Quartus II13.0为代表的经典版本和以15.1为代表的更新版本之间,解决问题的一些小的差异. 如果用户只是想快速解决问 ...
- [LeetCode 题解]: Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. 题解: 寻找一组字符串的最 ...
- 小程序:如何在wxml页面中调用JavaScript函数
早上过来遇到一个这样的bug: 在计算百分比的时候没有保留小数点后2位,从而导致一些无法整除的结果显示太长 一开始,我以为这是一个很普通的bug,既然wxml在页面{{}}内支持简单的运算,我想也应该 ...
- LAYABOX 开发遇到的问题记录
1. 如若在MAC下用LAYA开发H5游戏, 调试的时候会发现像素点过小(mac 5k屏),直接用下面按比例填充就好了 //保持原始高宽比的情况下,将舞台铺满屏幕,超出比例的部分会有黑边 ...
- GPU大百科全书 第二章 凝固生命的光栅化
光栅化——死神来了…… 前言:在上一期的GPU大百科全书里,我们目睹了可爱的香草从抽象世界走向现实,从方程还原成实体的全过程.可以说香草活了,因为几何单元,我们赋予了她完整的灵魂. 如果你正在为G ...
- css3导航鼠标经过移动、缩放、转动、拉长、拉伸
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PHP 执行系统外部命令的方法 system() exec()
PHP作为一种服务器端的脚本语言,像编写简单.或者是复杂的动态网页这样的任务,它完全能够胜任.但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功 ...
- 如何使用 sort 命令来找到几个版本库之间的共同文件
Linux 命令行中的词汇出现次数统计 导航: 需求: 需要快速了解 ChromeExtended 编写. 操作: 从 Github 上找到了五个前辈们写的 Mode ,需要对其进行分析. 需要用到的 ...