前文参见 《CentOS 7 下通过 Cython 编写 python 扩展》, 用的是 Python2.7,本文用的是 Python3.6

yum install python3 python3-devel gcc
pip3 install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple

创建 pyx 文件与前文一致

python3 setup.py -build_ext --inplace 

如遇到出错,报告

hello.c:2264:3: error: ‘for’ loop initial declarations are only allowed in C99 mode

表示当前的 gcc 4.8.5 默认仅支持 C89 标准, 不兼容在 for 中定义循环变量,搜索一圈没找到如何在 setup.py 中传参支持 -std=c99,ChatGPT 倒是给了个方案

from setuptools import setup, Extension
extensions = [Extension("your_module", ["your_module.pyx"], extra_compile_args=["-std=c99"])]
etup(
ext_modules=extensions,
# other setup parameters...
)

可惜运行下来还是一样的错误,还尝试过添加文件头

# distutils: language=c++
# distutils: define_macros=PY_SSIZE_T_CLEAN
# cython: language_level=3
# cython: extra_compile_args=['-std=c99']

也不解决问题。好在已经生成了 hello.c,于是参考控制台输出自己手动完成后续编译

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 \
-g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
-fstack-protector-strong --param=ssp-buffer-size=4 \
-grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE \
-fPIC -fwrapv -fPIC -I/usr/include/python3.6m -c hello.c -o \
hello.o -std=c99

不错,生成了 hello.o 之后,再通过

gcc -shared hello.o -o hello.so

终于得到了 hello.so 文件,运行调用

python3 hello.py

输出

Hello cython

尝试通过Python2 调用会报错

python hello.py 
ImportError: /root/hello_pack/hello.so: undefined symbol: _Py_FalseStruct

应该是不兼容 Python2

填坑 CentOS7 使用 Python3 安装 Cython 编写扩展的更多相关文章

  1. CentOS7.5 Python3安装pip报错:ModuleNotFoundError: No module named '_ctypes' --Python3

    1.问题:pyhontModuleNotFoundError: No module named '_ctypes'  操作系统:CentOS7.5 安装完Pyhotn3后(如何安装Python3,安装 ...

  2. 关于windows下 python3安装 cython的说明

    针对python3.6希望在windows环境下安装cython,但是网上任何关于mingw的尝试都没有生效.所以只能下载 vs, 1.去官网https://visualstudio.microsof ...

  3. Centos7下python3安装pip-9.0.1

    pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法 1.下载pip安装包 [root@localhost ~]# wget https://pypi ...

  4. Centos7下python3安装ipython

    一.通过压缩包安装ipython 1.下载ipython安装包 [root@localhost ~]# wget https://pypi.python.org/packages/79/63/b671 ...

  5. centos7.0 php-fpm 安装ImageMagic php扩展imagick

    Just copy and paste: $ yum install make $ yum install gcc $ yum install php php-fpm php-devel php-pe ...

  6. [Python3 填坑] 009 深拷贝与浅拷贝

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python3.7 官方文档 2.2 赋值.切片与 copy() 分析 分析 分析 分析 2.3 copy 模块 分析 分析 2.4 小 ...

  7. CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇)

    安装前记: 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿 ...

  8. Cython的用法以及填坑姿势

    因为项目需要,需要优化已有的Python代码.目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层.如果去掉指令解释这个阶段,直接进入C代码层, ...

  9. centos7虚拟机下python3安装matplotlib遇到的一些问题

    1.安装位置 centos7虚拟机+python3.6 2.问题 2.1如果是使用的python2版本可以使用如下方式, #yum search matplotlib 返回如下: 已加载插件:fast ...

  10. centos7源码安装Python3的前提条件

    centos7源码安装Python3的前提条件: # yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline- ...

随机推荐

  1. SEO初学指南之关键词研究(2) - 搜索意图分析

    Hi,我是听风.这篇文章我们深入探讨下关键词研究中最重要的一点:搜索意图. 虽然这在本系列教程的第一篇中提到过搜索意图,但是我还是想再写一篇文章来帮助你们了解什么是搜索意图以及如何再关键词研究中使用它 ...

  2. 【Java】Input,Output,Stream I/O流 04 对象流&序列化

    对象流,序列化机制 ObjectInputStream ObjectOutputStream 序列化 对象 写入转 数据 持久化 反序列化 数据 读取转 对象 活化 - 任何实现了Serializab ...

  3. Springboot实现HTML表单from简单的接收信息

    HTML< from >元素 from可向Web服务器提交请求 普遍格式: <from action="服务器地址" method="请求方式" ...

  4. If Messi doesn't understand how to respect others, then he also doesn't deserve to receive respect from others.

    If Messi doesn't understand how to respect others, if he doesn't understand the spirit of honoring c ...

  5. 记一次失败记录: MindSpore1.3.0 GPU 源码安装 —— Ubuntu18.04系统 (最终安装结果为失败)

    官网地址: https://www.mindspore.cn/install 系统:Ubuntu18.04 硬件: i7-9700k CPU 2060super nvidia显卡 由于考虑到minds ...

  6. Ubuntu搭建ssh服务器

    Ubuntu安装后默认只有ssh客户端,即只能在Ubuntu内去连接其他ssh服务器,若想实现我们的Ubuntu被其他主机远程连接,则需要自己去安装ssh服务端. 安装 进入Ubuntu18.04,打 ...

  7. 使用Packer构建镜像

    什么是Packer Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如虚拟机镜像.Docker 镜像等. Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜 ...

  8. ClassFinal防JAVA代码反编译

    亲测可用!不过项目暂停更新了. 传送地址:https://gitee.com/roseboy/classfinal#%E5%8A%A0%E5%AF%86

  9. C#使用泛型方法将Datatable转换成List对象集合

    在项目中遇到需要将Datatable转换成对象的需求,通过dr[0]取下标这种获取,如果数据的顺序发生了改变则需要改变全部,工作量大 foreach (DataRow dr in dt.Rows) { ...

  10. c# 复制文件夹内所有文件到另外一个文件夹

    /// <summary> /// 开始转移 /// </summary> /// <param name="sender"></para ...