python .so 和.py文件执行顺序 您所在的位置:网站首页 python转so python .so 和.py文件执行顺序

python .so 和.py文件执行顺序

2023-07-30 23:24| 来源: 网络整理| 查看: 265

这是我参与2022首次更文挑战的第11天,活动详情查看2022首次更文挑战

先说答案,当本地路径下同时存在.so和.py文件的情况下,优先调用的是.so

环境centos7.6

应用场景

  Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,使用其开发产品快速高效。

  python的解释特性是将py编译为独有的二进制编码pyc文件,然后对pyc中的指令进行解释执行,但是pyc的反编译却非常简单,可直接反编译为源码,当需要将产品发布到外部环境的时候,源码的保护尤为重要. 准备工作

  环境是可为linux/centos,我Windows10本地是Bash on Ubuntu on Windows,用起来很方便,命令行打bash即进入命令行

  思路是先将py转换为c代码,然后编译c为so文件   

所以要安装以下内容

python 安装:cython pip install cython linux 安装:python-devel,gcc yum install python-devel yum install gcc

初步编译   

  在testing文件夹下有your_file.py文件待编译,内容如下

# -*- coding: utf-8 -*- class test: def say(self): print 'hello' 复制代码

  新建setup.py,内容如下

from distutils.core import setup from Cython.Build import cythonize setup(ext_modules = cythonize(["your_file.py"])) 复制代码

  在bash中执行

cd testing python3 setup.py build_ext 复制代码

  运行后会生成build文件夹,如下,lib.linux-x86_64-2.7下就是我们想要的.so文件    在这里插入图片描述

  现在so文件就可以像普通py文件一样导入了

cd build/lib.linux-x86_64-2.7/ python from your_file import test test().say() 复制代码

在这里插入图片描述

集成编译

  最新代码github:github.com/ArvinMei/py…

做了以下内容:

文件夹编译

删除编译出的.c文件

删除编译的temp文件夹

注意问题

编译后执行需要相同的python版本和编码 py中使用__file__内置变量的文件编译后调用时会出问题,暂时没有解决,还需要使用pyc代替 使用时注意权限控制

至此本地已经有了test.py的.so版本 在这里插入图片描述

在此目录下新建test.py文件 vi test.py

class test: def say(self): print('hahaha') 复制代码

此时本地有两个文件 在这里插入图片描述

在本地同时存在.so 和 .py文件时候执行 在这里插入图片描述

此时生效的是.so 文件

将.so 修改为so_old 再执行,本地只存在.py文件 在这里插入图片描述

此时生效的是.py 说明当.so 和.py 文件同时存在的时候 优先执行的是.so



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有