又是因为别人代码里有这么一个部分,用到了cython,,简而言之,就是利用这个模块调用C语言,从而加速程序运行,其中具体怎么调用我还没整清楚,但基本用法差不多了解了。

1 安装:https://www.lfd.uci.edu/~gohlke/pythonlibs/    在这个里面找到 根据自己的版本找到cython 然后 pip install ....whl

2 编写代码:需要两个 test.py 和  setup.py  创建在自己的python目录下(我创建了一个cython文件)-e.g: C:\Python27\cython

参考:https://www.cnblogs.com/jianmu/p/7497274.html?utm_source=debugrun&utm_medium=referral

# test.py
def say_hello():
print "hello world"
# setup.py
from distutils.core import setup
from Cython.Build import cythonize
  setup(ext_modules = cythonize("test.py"))

3 编译代码:在cmd运行窗口将位置改到刚才创建的文件夹--然后 编译这段话 :

python setup.py build_ext  --inplace

可能出现如下错误:找不到 error: Unable to find vcvarsall.bat

一般解决办法:直接CMD中输入set 看看目前路径设置情况,发现只有VS140COMNTOOLS 的位置,没有 VS90COMNTOOLS 的位置(python2.x都是要配置VS90的路径)所以需要将VS140的位置复制给VS90:

CMD输入SET VS90COMNTOOLS=%VS140COMNTOOLS%(VS140=VS2015,PS:如果是python3.x 则要设置VS100的位置)

重新输入SET,看到下面两个地址都有的位置;还有就是,可能这会儿关了,一会而又要重新设置,所以我在电脑-属性-高级设置-环境变量的系统变量中加入了值:VS90COMNTOOLS=%VS140COMNTOOLS%(不知道有没有用)

上面解决完后,,如果没有大问题,再次输入python setup.py build_ext  --inplace就成功了

4 检验模块 进入python,,输入

import test
test.say_hello()

5 上面只是我的测试部分,我真正要执行的是别的:

在执行编译代码部分:之前需要的文件包括test.py 和setup.py 但是这里别人代码里的是 CMacroDemand.pyx 和 setup.py

.py 和 .pyx 应该是都可以编译的;

6 setup 文件到底怎么写:

我的setup里面要导入numpy,所以 include_dirs=[numpy.get_include()],这句不能少,因为之前有问题让我我删掉 include_dirs过,后来又提示有问题

Cython: fatal error: 'numpy/arrayobject.h' file not found, using numpy

解决方案:https://stackoverflow.com/questions/39114132/cython-fatal-error-numpy-arrayobject-h-file-not-found-using-numpy

Cython结合Numpy也很方便。

如果使用numpy的话,一般setup.py要这样写:

from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy setup(ext_modules=cythonize("test.pyx"),include_dirs=[numpy.get_include()]) 作者:季文瀚
链接:https://www.zhihu.com/question/23003213/answer/105223038

然后 可以直接输入

python setup.py build(比之前那个少一点东西,估计也是参数位置等问题我也不研究了,我用的就是这句)

具体用用哪句看看这个把:https://www.cnblogs.com/freeweb/p/6548208.html 

编译完之后

会有一个build文件夹--lib文件夹,里面有.pyd文件,我的是从里面挪出来的,就可以import 模块了。

ps:一些别的cython完整流程的博客:

https://www.cnblogs.com/nucdy/p/7736155.html

https://zhuanlan.zhihu.com/p/24311879

PPS:最后的最后,我刚刚试了一下,,在别的地方用python-- import CUtils,还不行,,必须要在那个cython文件夹下面才可以用,拷贝也行。

 

cython 成功创建import 模块的更多相关文章

  1. SpringCloud创建Config模块

    1.说明 本文详细介绍Spring Cloud创建Config模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 创建Config模块这个子工 ...

  2. SpringCloud创建Gateway模块

    1.说明 本文详细介绍Spring Cloud创建Gateway模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 和已经创建好的Eureka ...

  3. SpringCloud创建Eureka模块

    1.说明 本文详细介绍Spring Cloud创建Eureka模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 在里面创建Eureka模块, ...

  4. python import 模块异常问题

    新项目开始了,(tornado,python) 结果出现了一个比较诡异的问题. import 自己的在conf文件夹下配置文件settings的时候, from conf.settings impor ...

  5. python 在不同层级目录import 模块的方法

    有一个文件夹/home/a,  里面有个模块叫b.py,  我怎么把他import到程序里? 1). import sys; sys.path.append("/home/a/") ...

  6. YII 创建后台模块

    1,在protected/config/main.php目录下修改如下目录 'modules'=>array( // uncomment the following to enable the ...

  7. python 中如何导入一个自己创建的模块

    导入模块的语句的三种方法: 1.import module 2.from module import name1,[name2,name3....] 3.from module import * 先看 ...

  8. import模块/包--软件开发规范

    一. 模块 模块:就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译 ...

  9. python之import模块及包的调用

    模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...

随机推荐

  1. 2019/4/8 wen text

    构造器产生对象的步骤:1.为对象在内存中申请内存空间. 2.对对象的属性申请内存空间. 3.为属性进行初始化. 4.执行构造器中编写的其他代码. 静态方法调用:    类名.方法 非静态方法调用:  ...

  2. JavaScript 序列化、转义

    JavaScript  序列化.转义 序列化 // 将对象转换为字符串 JSON.stringify() // 将字符串转换为对象类型 JSON.parse() 转义 // URl中未转义的字符 de ...

  3. Linux 简单文本处理

    1.创建文件加“.”带表隐藏文件 2.password文件内“user:x:501:501::/home/lishiming:/bin/bash”含义:   用户名:密码控位键:UID:GID:用户解 ...

  4. vc++2010如何新建项目并在控制台打印helloworld

    关于写c++使用什么集成开发环境的问题其实挺纠结的.我找了好久找到codeblocks,发现这款IDE还是最适合用在最标准的c++语法环境中.其实先前装过vs2015旗舰版,但是这款软件太大了,非常消 ...

  5. robot framework---时间控件取值

    项目中遇到日期控件定位不了,网上各种找,并没有适合我的,目前通过Javascript已解决了,再次做个记录,方便自己日后查找,如有同样问题的同学也可以有个参考! 先说明,不同的定位方式是看开发同学如何 ...

  6. robot framework学习二-----元素定位

    文章摘自:https://www.cnblogs.com/fnng/p/3901391.html 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot fram ...

  7. Java项目中使用log记录日志的一些总结

    本文介绍了一下自己在Java项目中使用log的一些总结,从日志的作用.日志的选用.日志级别介绍.日志记录的一些最佳实践几个方面阐述. 日志的作用 主要作用包括: 1.出问题后定位当时问题 2.显示程序 ...

  8. bootStrap table 和 JS 开发过程中遇到问题汇总

    1..bootStrap-table表头固定 在table定义的时候给高度属性就可以自动生成滚动条,并且固定表头[height: 220,] 2.为动态生成的DOM元素绑定事件 on("cl ...

  9. vue的组件之间传值方法

    父组件 <template> <div> 这是父组件 <children v-bind:parentToChild="toChild" v-on:sh ...

  10. cl 命令行配置

    VS2013啊什么老是要license,而且打开还特别庞大. 当想测试一个小东西的时候,我并不需要创建一个很大的工程,只需要编译下,运行下即可. 这时候采用 cl 命令编译会快很多. 下面是步骤: 1 ...