第一种办法:

执行命令:cython test.py

结果:会在同一目录下面生成test.c文件

执行命令: gcc -c -fPIC -I /usr/include/python2.7 test.c

结果: 在同一目录下面生成test.o文件

执行命令: gcc -shared test.o -c test.so

结果: 在同一目录下面生成test.so文件

最后,生成的test.so文件就是需要的文件

第二种办法:

[setup.py]

from distutils.core import setup

from Cython.Build import cythonize

setup(

name = "test",

ext_modules = cythonize("test.py")

)

执行命令: python setup.py build_ext --inplace

第二种办法是对单独文件进行编译,下面介绍一种批量的办法:

#-*- coding:utf-8 -*-_

import os

import re

from distutils.core import Extension, setup

from Cython.Build import cythonize

from Cython.Compiler import Options

# __file__ 含有魔术变量的应当排除,Cython虽有个编译参数,但只能设置静态。

exclude_so = ["__init__.py", "run.py"]

sources = "backend"

extensions = []

remove_files = []

for source,dirnames,files in os.walk(sources):

for dirpath, foldernames, filenames in os.walk(source):

if "test" in dirpath:

break;

for filename in filter(lambda x: re.match(r".*[.]py$", x), filenames):

file_path = os.path.join(dirpath, filename)

if filename not in exclude_so:

extensions.append(

Extension(file_path[:-3].replace("/", "."), [file_path], extra_compile_args = ["-Os", "-g0"],

extra_link_args = ["-Wl,--strip-all"]))

remove_files.append(file_path[:-3]+".py")

remove_files.append(file_path[:-3]+".pyc")

Options.docstrings = False

compiler_directives = {"optimize.unpack_method_calls": False, "always_allow_keywords": True}

setup(

# cythonize的exclude全路径匹配,不灵活,不如在上一步排除。

ext_modules = cythonize(extensions, exclude = None, nthreads = 20, quiet = True, build_dir = "./build",

language_level = 2, compiler_directives = compiler_directives))

# 删除py和pyc文件

for remove_file in remove_files:

if os.path.exists(remove_file):

os.remove(remove_file)

执行命令: python setup.py build_ext --inplace

结果:最后生成.so文件,删除中间结果。

重点提一下,在编译flask代码时,遇到问题,报错:参数不够(大体意思是这样,错误未截图),在compiler_directives中添加: {always_allow_keywords:True}

原文地址:https://www.cnblogs.com/zhangjxblog/p/12168360.html

python编译成c语言-cython编译Python为c语言相关推荐

  1. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  2. C编译成其他语言,编程达人 所有的编程语言最后会编译成C,再编译成汇编,最后落实到硬件操作上吗?...

    首先上结论: (1)不是所有的编程语言都要先编译成C (2)甚至有编程语言连编译成汇编这一步都跳过了. (3)不是所有的编程语言都需要编译,有的是纯解释型语言 1. 编程语言到硬件执行之间到底发生了什 ...

  3. python代码加密cython_利用Cython对python代码进行加密

    利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...

  4. python代码加密cython_利用Cython加密python脚本

    由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密.社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的:而还有一些声音则是不论如何 ...

  5. 将python编程为c_使用Cython为Python编写更快的C扩展

    在我们这个包含了 7 个 PyPI 库的系列文章中学习解决常见的 Python 问题的方法. Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途(例如 Web 编程.业务 ...

  6. python源码只有编译成二进制_setup-cython(2):把Python打包成二进制应用吧

    代码近过Cython化之后,安全性得到了提高,那么紧接着自然就会有一个不得不面对的事情,如何把我们写好的应用发布给别人呢? Java可以直接打包成Jar.微软系的天生就能打包成exe,而Go则非常的舒 ...

  7. python转化成字符串_如何利用Python将其他数据类型转换成字符串类型

    Python设计语言中有一类常用的数据类型:字符串数据类型.字符串数据类型定义的变量可以使用双引号或单引号将字符括起来,除了字符串数据类型,还有其他的数据类型,如整型.布尔型.列表.字典.元组.可以将 ...

  8. python学成需要多久-小白学python怎么快速入门?多久能完成一个项目?

    首先我们可以来看一下学完Python可以做什么? 1.网站后端程序员:使用它搭建网站,后台服务比较容易维护; 2.自动化运维:自动化处理大量的运维任务; 3.数据分析师:快速开发快速验证,分析数据得到 ...

  9. python学成什么样可以找工作-Python 爬虫学到什么样就可以找工作了?

    爬虫入门容易.随便拉个智商正常的大学生,不用一个星期就能教他会爬豆瓣.如果一直停留在仅仅爬爬豆瓣电影,采黄图之类的水平,是很难提升很难找到工作的. 最基本的,你要会: * 基本计算机知识,计算机网络. ...

最新文章

  1. C++ 内存泄漏检测:valgrind和AddressSanitizer
  2. 海外IDC数据中心为什么要做REITs
  3. (转载)GET和POST两种基本请求方法的区别
  4. [译].Net中的内存-什么分配在了哪里
  5. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
  6. ASP.NET绑定控件语法
  7. 【TSP】基于matlab遗传算法求解13城市旅行商问题【含Matlab源码 1255期】
  8. 如何优化MySQL千万级大表,我写了6000字的解读
  9. 编译原理实验:miniC语言编译器
  10. activity多实例任务节点审批
  11. 极值理论(一):极大值极限分布
  12. 2018-2019赛季多校联合新生训练赛第四场题解与补题(中石油)
  13. CImageList::GetImageInfo取到的bitmap不能用
  14. 最好的十个英语网课平台,这年头在网上学英语靠谱吗?
  15. Muti-Barrage 一个多功能的Android弹幕库
  16. 文本编辑器EditPlus
  17. iOS上应用如何兼容32位系统和64位系统
  18. FPGA 24 工程模块 红外遥控(NEC协议)解码
  19. XDoj 1037 希希的多项式 (python)
  20. 计算机应用基础最要考点,北京自考计算机应用基础答题及时存盘

热门文章

  1. 三维荧光平行因子学习记录--(一)DOMfluor工具箱的数据导入
  2. 防火墙 | ARP欺骗攻击
  3. 【智慧消防云平台】感知、识别、定位,实时动态采集消防信息
  4. Boxcryptor与密叔叔使用体验对比——谁才是当下加密云存储的版本答案?
  5. 怎么给服务器数据备份
  6. 动态路由协议 RIP
  7. ​ Twisted——基于事件驱动的Python网络框架
  8. 使用libpcap库用c编写网络嗅探器
  9. 文件删除如何恢复?简单的方法
  10. python打字机效果_零基础手把手教你用Python做一个怀旧打字机