前文参见 《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. 修改PE文件来实现管理员权限

    在Windows我们常用的方法就是给应用添加app.manifest清单文件,然后生成的Exe就会具有管理员权限. 近期我在使用Wix制作Exe安装包时,发现此方法不通,我在github上和Stack ...

  2. Jmeter强制结束线程

    例子:正常的线程是执行2次请求 1.需要实现结果 执行请求1后,判断test1=100,强制结束线程 执行请求1后,判断test1 != 100,继续执行请求2 2. 线程组改造 在请求1后面增加[i ...

  3. canvas实现截图功能

    开篇 最近在做一个图片截图的功能. 因为工作时间很紧张, 当时是使用的是一个截图插件. 周末两天无所事事,来写一个简单版本的截图功能. 因为写的比较简单,如果写的不好,求大佬轻一点喷 读取图片并获取图 ...

  4. 【微信小程序】 使用NPM包与VantWeapp

    小程序对npm的支持与限制 目前,小程序中已经支持使用npm安装第三方包,从而来提高小程序的开发效率. 但是,在小程序中使用npm包有如下3个限制: ① 不支持依赖于Node.js内置库的包② 不支持 ...

  5. 【WSDL】03 使用注解自定义服务信息

    对原来的自定义WebService设置注解: package cn.cloud9.jax_ws.server.intf; import javax.jws.WebMethod; import java ...

  6. mojo编程语言:mojo调用python库及内置函数builtins

    编程语言mojo调用python十分方便,mojo不仅可以调用python的库函数更可以调用python的内置函数(builtins),给出示例代码: from python import Pytho ...

  7. BST二叉查找树的接口设计

    /*************************************************************************************************** ...

  8. VUE——语法糖

  9. 使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验

    前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Ref ...

  10. CSP-J 第一轮 2024模拟卷-1

    CSP-J 第一轮 2024模拟卷-1 单项选择题 我只写重点!!! 第四题 NOI复赛评测机所用的Linux系统属于() A.UML B.IDE C.OS D.Database 答案:C 解析:UM ...