感觉Python开发环境的搭建,有点烦。比起VC、VS、MyEclipse、Matlab,不知道烦到哪儿去了。


Win+MyEclipse+pyDev


我是现在windows下学的Python2。用的工具是MyEclipse

注意,源文件目录下一定不要有中文!!!

假定我在windows下面,用myeclipse进行python开发。

1. 安装myeclipse。已经完成。

2. 下载安装Python。官网。我目前用的python2.7.13版本。windows。x86。一个exe,一路next就好。(写到这里,我发现原来这是变宽字体…)

3. 计算机的环境变量 --> 我是对系统变量的path,增加了C:\Python27这个目录(这个目录下有python.exe)。

此时可以去CMD下检查是否OK。

4. 下载安装Pydev For eclipse。SourceForge上有。是个压缩包。

因为我用的myeclipse2013,所以,

进入C:\Users\qcy\AppData\Local\MyEclipse Professional (这是我myeclipse的安装路径)

把第4步下载的压缩包,解压,把feature和plugin与myclipse下的两个文件夹合并。

5. 打开myeclipse,window--preferences--pyDev-- interpret - python -- 然后我点了auto Config,它自动帮我把C:\Python27\python.exe加入解释器了。


然后写第一个程序:Hello,world!

粉粉的桌面。据说,这个颜色(255,145,177)可以有效缓解人的焦虑和紧张。

cython 指定python 版本 python安装cython_Cython


Win+Anaconda+Spyder+PyCharm


面向过程部分的语法学完了,就希望能用借助Python来进行更高级一点的科学计算方面的内容了。(e.g. 类似于matlab的向量化操作)

因此,我升级了工具。目前为止,怕嫌麻烦,我还是喜欢大而全的下一步下一步地安装。一劳永逸。毕竟名字里有个“逸”。


Anaconda Spyder



在windows下,我下载了Anaconda3-4.3.0.1-Windows-x86_64,其Python的版本是3.7。

安装完成以后,找到Ananconda的navigator,相当于是一个welcome的界面。可以启动一些exe。e.g. spyder、ipython、notebook(Jupyter)。

从此,可以在spyder里面写代码,运行了。spyder和matlab长得比较像,用法感觉也还可以。

只是目前为止,单步调试我还是觉得不如matlab智能。可能是我没有学会吧。


利用pip安装python的别的包。

突然需要一个ta-lib的包。但是我本地并没有这个包。

在这个网站上,可以下载很多Python包

在anaconda的prompt下,输入如下命令,就可以安装了。

cython 指定python 版本 python安装cython_eclipse_02


另外,还需要装一个ffn的包。

在anaconda的spyder的ipython(右下角)中,输入pip install ffn。就可以安装ffn了。(好像是。如果不行的话,就到anaconda的prompt下去安装。)

在Anaconda Prompt中输入pip list,可以看到已经安装好的包。


如何打开Jupyter?

打开anaconda的prompt,cd切换到ipynb文件目录下,然后输入jupyter notebook,就可以打开了,并且把工作路径设置到了刚刚进来的目录下。

e.g. D:\>jupyter notebook


PyCharm



进一步,我希望用一个对于代码编辑更方便的工具,找到了PyCharm。只安装了一个社区版pycharm-community-2016.3.2。毕竟专业版要再去找序列号。麻烦了。


PyCharm,可以设定使用Eclipse的快捷键。


Eclipse中是content assist,PyCharm中是complement。


运行run。


Run -- Edit Conf -- 新增+一个run conf --> 选择script。




暂时,又可以支持我再用一段时间。





Win + VS + Cython



距离上一次的安装过了差不多半个月。又有要补充的东西了。


我现在面临着python的for循环特别慢的问题。尽管我已经很努力地在写向量化运算了。可是有的时候还是不能避免for循环。


为了让它运行得稍微快一点,我应该用一个可以编译它的工具。


不像matlab,可以直接用coder generator傻瓜式地编译。python的编译,本来在linux操作系统下,应该也不难,但是在windows下真的很麻烦!!


搞了一下午加一晚上,终于似乎好像可以了。因此在这里总结一下。



下载必须的文件



首先,还是要下载一些必须的文件。


1. 把python编译成c的编译器。因为我已经有Visual Studio了,因此可以直接用VS来编译了。


2. Cython插件。因为我当时装的是Anaconda,在anaconda的prompt里面输入pip list,就可以发现我已经装好了Cython了的,所以也不需要安装了。


警告!我之前安装过VS2015的社区版。但是觉得不好用就卸载了。电脑里就还剩VS2012。但是我觉得应该是VS的编译器的版本,在系统环境中仍然是VS2015的编译器,所以在后面编译py文件的时候,始终提示我说找不到编译器。估计是VS卸载的时候,没卸载彻底。另外我也没有找到系统中VS编译器版本的配置文件。于是只好重新安装了一下VS2015。就是这个问题,折腾了一个下午加一个晚上。这也是我坚持不放弃windows系统所带来的所谓的“恶果”。


另外,我之前在系统环境变量里面配置了一个2.7版本的python。现在把它换成了anaconda的python。





cython 指定python 版本 python安装cython_myeclipse_03




定义需要编译的函数和setup文件



1. 和matlab类似,为了编译自己写的一段python函数,我们也需要自定义一些函数。但此时需要用Cython所能理解的格式去写。


2. 为了把函数编译成功,还需另外写一个编译配置文件,名叫setup。



这里举一些例子。


1. 经典案例。hello world。


Fibonacci数列的一道题。



案例1 Hello




1. 创建 一个pyx文件


hello.pyx


def say_hello():
    print "Hello World!"


2. 创建一个 setup文件


# -*- coding: utf-8 -*-
"""
Created on Sat Mar  4 15:59:29 2017

@author: qcy
"""


from distutils.core import setup
from Cython.Build import cythonize
setup(name = 'Hello world app',
      ext_modules = cythonize("hello.pyx"))



python setup.py build




cython 指定python 版本 python安装cython_myeclipse_04




在当前目录下生成了一个build文件夹和hello.c文件。



cython 指定python 版本 python安装cython_cython 指定python 版本_05




4. 安装。


python setup.py install



cython 指定python 版本 python安装cython_eclipse_06




它就把刚刚编译好的一些东西写到C盘anaconda下面的某个文件夹里面了。(还写了一个fib的文件,那是第二个例子。我也不知道为什么一起就写起进去了)。


在我这种配置环境下,刚刚编译好的这个module被安装到了C:\ProgramData\Anaconda3\Lib\site-packages这里面。


关于指定安装路径,我在后文会提到。



5. 测试。创建一个 main1.py文件


# -*- coding: utf-8 -*-
"""
Created on Sat Mar  4 20:38:03 2017

@author: qcy
"""

import hello
hello.say_hello()


cython 指定python 版本 python安装cython_python_07




这和java一开始的感觉一样。都是敲命令。先是javac,然后是java…


第一个例子hello到此结束。



案例2 关于fibonacci数列的一道题


1. fib.pyx文件


# -*- coding: utf-8 -*-
"""
Created on Sat Mar  4 15:57:51 2017

@author: qcy
"""

def fib(n):
    cdef int a = 0
    cdef int b = 1
    while b<n:
        print(b)
        a, b = b, a+b



2. setup.py文件


# -*- coding: utf-8 -*-
"""
Created on Sat Mar  4 15:59:29 2017

@author: qcy
"""


from distutils.core import setup
from Cython.Build import cythonize
setup(name = 'Hello world app',
      ext_modules = cythonize("fib.pyx"))


3. 测试main文件


# -*- coding: utf-8 -*-
"""
Created on Sat Mar  4 20:38:03 2017

@author: qcy
"""

import fib
fib.fib(10000)


cython 指定python 版本 python安装cython_Cython_08




第二个案例到此结束。



更简单的安装方式



打开cmd,进入setup.py所在路径。


输入以下非常精简的命令。


python setup.py build_ext --inplace


回车以后,你就会发现,有一个.pyd的文件自动就出现在你的眼前了…



在Jupyter Notebook中编译



在anaconda的jupyter notebook中,也可以直接编译+运行的。


1. 打开anaconda prompt


2. 开启jupyter notebook


3. 导入一些文件


4. 直接开始写


%load_ext Cython
%%cython
cdef int a=0
print(a)
%%cython
def fib(long n):
    cdef long a = 0, b = 1, i
    for i in range(n):
        a, b = a + b, a
    return a
for i in range(10):
    print(fib(i))


cython 指定python 版本 python安装cython_eclipse_09


这也是可以的。


PLUS:在notebook中,鼠标没有选中任何东西的情况下,按B,就是新增加一栏。按Ctrl+Enter,就是执行本小节。



把py编译、安装到指定路径


指定安装路径,指定保存安装日志


打开cmd,进入setup.py所在的目录,输入python setup.py install --prefix=路径 --record log文件名


e.g.


F:\source_files\quant\PyCharm\qcy_minutes\test_cython>python setup.py install --prefix=F:\source_files\quant\PyCharm\qcy_minutes\test_cython --record log



cython 指定python 版本 python安装cython_Cython_10




在目标路径下,就会多出几个文件。


cython 指定python 版本 python安装cython_eclipse_11




log文件,里面是这样的内容。安装日志吧。


F:\source_files\quant\PyCharm\qcy_minutes\test_cython\Lib\site-packages\fib.cp36-win_amd64.pyd
F:\source_files\quant\PyCharm\qcy_minutes\test_cython\Lib\site-packages\fib_app-0.0.0-py3.6.egg-info



从此,就可以通过import自定义的module,导入py文件,调用里面的function运行了。




这时需要指定刚刚装好的那个module所在的位置。在windows下,编译好的python将以pyd的文件存放。


我这里是存在了F:\source_files\quant\PyCharm\qcy_minutes\test_cython\build\lib.win-amd64-3.6这个路径下。


注意:路径如果是"\"分割,就是两个“\\”,转义字符嘛。否则,就写一个“/”)


import sys
sys.path.append('F:\\source_files\\quant\PyCharm\\qcy_minutes\\test_cython\\build\\lib.win-amd64-3.6')
print (sys.path)
import fib as fibo

从此,就可以使用了。



又来一个新的问题(重新编译时出错,无法删除文件)


但是,一旦import以后,此时我想删掉刚刚安装好的模块。




cython 指定python 版本 python安装cython_cython 指定python 版本_12




或者,重新编译,也报错。




cython 指定python 版本 python安装cython_Cython_13





目前我知道的办法:


1. 关掉spyder(因为我在spyder里面import进去了)。


2. restart python的kernel。



我选择了第二种。 -_-! 这也挺麻烦的!






以后还应该学习配置python的虚拟环境。



学无止境……