Python程序编译为动态库pyd或so (适用于Windows和Linux)

这篇具有很好参考价值的文章主要介绍了Python程序编译为动态库pyd或so (适用于Windows和Linux)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Welcome to My Blog

文章唯一地址:https://blog.csdn.net/REAL_liudebai/article/details/125126432


  • 问题:
      1)Python源代码扩展名通常为.py,任何人都可以看到源代码内容,能否将Python程序编译为二进制文件(隐藏我粗暴的编程风格,或者你的代码思想,易于调用)。

  • 解决办法:
      2)在Windows和 Linux平台将Python代码编译为类似于dll的动态链接库;
      3)Windows下编译为 .pyd 文件,Linux下编译为.so 文件。


开始吧!



1. 写一段Python代码

  • 首先敲一段代码,这里在名为mysum.py的Python文件中写下一个求两数之和的简单函数,函数名为i_sum
  • 需要注意一个问题,除了代码前两行常见内容,第3行添加 # cython: language_level=3,以在Python3环境进行编译。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# cython: language_level=3

"""
@File    :   mysum.py
@Time    :   2021-08-01 21:21:52
@Author  :   null
@Link    :   https://blog.csdn.net/REAL_liudebai
@Version :   1.0
"""

# here put the import lib
import os

def i_sum(a, b):
	# 计算两数之和
	c = a + b
	return c

2. 准备编译环境

2.1. Windows系统下编译:

  • 安装easycython库,用来将 .py文件转换为二进制文件,点这里查看库的说明 ;
pip install easycython

2.2. Linux系统下编译:

  • 我在使用easycython库将 .py文件转换为 .so二进制文件时命令不能用。于是通过编写setup.py编译Python源代码:
  • 首先安装cython库 ;
pip install cython
  • 编写setup.py文件,将mysum.py写到最后一行。如果有多个.py文件,以逗号为间隔全部写上就行了;
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@File    :   setup.py
@Time    :   2021-08-01 19:22:37
@Author  :   null
@Link    :   https://blog.csdn.net/REAL_liudebai
@Version :   1.0
"""

# here put the import lib
from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize(["mysum.py"]))

3. 开始编译

3.1. Windows系统下编译:

  • 打开Windows系统的命令行程序,进入mysum.py程序的文件夹(我的放在D盘根目录),使用命令:
easycython mysum.py
  • 看到以下输出,则编译成功:Python程序编译为动态库pyd或so (适用于Windows和Linux)

  • 此时mysum.py程序所在的文件夹有以下文件,将 .pyd文件改名为mysum.pyd(其中,cp38表示适用Python版本是3.8,win_amd64表示适用Python位数是64位,在调用时需要注意),其他的文件都可以删除了:
    Python程序编译为动态库pyd或so (适用于Windows和Linux)

3.2. Linux系统下编译:

  • mysum.pysetup.py放入同一文件夹,打开Linux终端,进入该文件夹,使用命令:
python setup.py build_ext --inplace
  • 看到以下输出,则编译成功:
    Python程序编译为动态库pyd或so (适用于Windows和Linux)

  • 此时mysum.py程序所在的文件夹有以下文件,将 .so文件改名为mysum.so,其他的文件都可以删除了:
    Python程序编译为动态库pyd或so (适用于Windows和Linux)


4. 调用(以Windows系统为例)

敲代码时直接导入库使用:

  • 命令行操作演示:打开Windows系统的命令行程序,进入mysum.pyd文件所在路径(我的在D盘根目录),进入Python环境。然后可以将mysum当作一个Python库进行调用。
    Python程序编译为动态库pyd或so (适用于Windows和Linux)

  • 这样就把Python 文件编译为Windows和Linux的动态链接库了,可以完美使用。

  • 注意:在调用时需要注意Python版本问题,调用环境要和编译的Python环境版本一致(如Python3.8.10编译,在Python3.8环境调用就行)。

记录一下自己的配置过程,有很多细节部分没有提到,欢迎交流。如有错误或改进地方,欢迎指正~


本文结束…

文章来源地址https://www.toymoban.com/news/detail-428836.html

到了这里,关于Python程序编译为动态库pyd或so (适用于Windows和Linux)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux 动态库so相关操作

    1. 查看库版本号 一般在文件名上有版本号,若文件名上没有版本号,使用如下命令查看: readelf -d libstdc++.so  2. 查看库内函数 a) nm -d libstdc++.so | grep 内容 b) objdump -tT  libstdc++.so | grep 内容 c) readelf -s libstdc++.so | grep 内容 3. 查看应用库依赖 ldd -d app 4. 待补充 https://www.cnblogs

    2024年02月15日
    浏览(32)
  • linux 动态链接库(.so)的生成和引用

    一.简介 动态链接库:在Linux系统中,动态链接库(Dynamic Linking Library)是一种在运行时链接的共享库。相比于静态链接库,动态链接库可以在程序运行时加载,而不需要在编译时链接到程序中,这样可以减小可执行程序的大小,也方便了库的管理和更新。 动态链接库有两个主

    2024年02月14日
    浏览(30)
  • 分析linux中动态库so文件的常用方法

    在linux系统中,我们经常会遇到各种各样的动态库文件,常见的是.so后缀,那么我们应该如何分析这些文件的用途和作用呢?毕竟我们不能一知半解的“搞事情”。 首先,我们从整体上了解一下该文件的基础属性,此时可以使用file命令,示例用法如下图所示: 通过执行结果

    2024年02月09日
    浏览(28)
  • 在linux上使用C++调用动态链接库.so文件(输入两个参数)

    在新服务器上已经实现了用Python调用.so文件,现在尝试C++接口, 使用c++编写和使用.so动态链接库_51CTO博客_c++动态链接库 参考这个人的调用函数Linux C++简单生成与调用so库_秦小乙的工作台的博客-CSDN博客 记录在C++里面调用linux的地址直接写绝对路径就可以,不用双斜杠:stri

    2024年02月08日
    浏览(38)
  • 【库函数】Linux下动态库.so和静态库.a的生成和使用

    目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态库错误记录 🌞3. 静态库 🌊3.1 静态库如何生成 🌍3.1.1 文件详情 🌍3.1.2 编译生成动态库 🌊3.2 静态库如

    2024年04月25日
    浏览(20)
  • C/C++封装:Windows/Linux下封装.lib/.so文件

    这里提供了两个C/C++中服务器与客户端之间通讯的两个程序,程序中封装了通信之间的函数方法,我们以这个程序为例进行封装。 文件目录结构按照C/C++标准开源项目进行存放: XTCP.h XTCP.cpp 首先编写编写 makefile 文件,用于编译两个程序,可以按照以下命令进行编译,编译后

    2024年02月16日
    浏览(29)
  • Linux上x86_64架构的动态链接器 ld-linux-x86-64.so.2

    /lib64/ld-linux-x86-64.so.2 是Linux操作系统上x86_64架构的动态链接器(也称为动态链接编辑器)。它负责加载和链接在运行时(即程序启动时或之后)被引用的动态库。现在,我们来深入了解其作用和重要性: 动态链接器的作用 : 当运行一个可执行程序时,该程序可能依赖于多个动

    2024年02月02日
    浏览(35)
  • aarch64-linux-gcc安装编译及生成so动态库和调用

    官方二进制下载 Ubuntu packages 提供了软件包: gcc-arm-linux-gnueabihf (4:7.4.0-1ubuntu2.3 以及其他的) 。 建议直接从 linaro 的官网下载相应版本的 gcc-linaro 交叉编译工具,并直接选择带有二进制的文件,即在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch

    2024年02月13日
    浏览(40)
  • Windows 11部署WSL(Windows Subsystem for Linux——适用于Windows的Linux子系统)

    WSL(Windows Subsystem for Linux——适用于Windows的Linux子系统) Windows Subsystem for Linux(简称WSL)是一个在Windows 1011上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机

    2024年02月16日
    浏览(33)
  • Linux gcc/g++编译链接头文件和库(动态库.so 和 静态库.a)

    最近在学习log4cpp库时,使用g++去编译,却发现自己不会链接...,这哪能行,于是网上钻研,终于解决,现在记录下来分享给遇到同样问题的人。 gcc和g++类似,这里就以g++为例! 刚好用到的log4cpp日志库有头文件和动态库.so和静态库.a,这里就以log4cpp库为例。 在安装好log4cpp库

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包