Python(1):环境搭建(含Cython安装)

版权声明:本文就算不是qcy原创,也经过了qcy的一番整理……。不做商业用途。欢迎转载。 https://blog.csdn.net/qcyfred/article/details/53790220

感觉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)可以有效缓解人的焦虑和紧张。



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下,输入如下命令,就可以安装了。



另外,还需要装一个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。
在pycharm中写了代码以后,需要运行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。



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


1. 和matlab类似,为了编译自己写的一段python函数,我们也需要自定义一些函数。但此时需要用Cython所能理解的格式去写。
2. 为了把函数编译成功,还需另外写一个编译配置文件,名叫setup。

这里举一些例子。
1. 经典案例。hello world。
2. 关于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"))

3. 控制台,把pyx编译成c文件。进入setup所在路径。
python setup.py build



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


4. 安装。
python setup.py install


它就把刚刚编译好的一些东西写到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()


这和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)


第二个案例到此结束。

更简单的安装方式


打开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))
这也是可以的。
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



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


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运行了。
但是,此时的导入不能直接import。因为import只会搜索python默认的一些搜索路径。


这时需要指定刚刚装好的那个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以后,此时我想删掉刚刚安装好的模块。



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




目前我知道的办法:
1. 关掉spyder(因为我在spyder里面import进去了)。
2. restart python的kernel。

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




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

学无止境……


展开阅读全文

没有更多推荐了,返回首页