关于python文件编译成so介绍的信息

  • 1、python源代码程序文件扩展名
  • 2、python 怎么调用so文件
  • 3、python程序py文件能做成so文件吗
  • 4、能否介绍一下用python编写和编译文件后的后缀名的意思吗?
  • 5、python *.so 文件 怎么生成的

python源文件后缀是py。

以 py 扩展名的文件是 Python 源码文件,由 python.exe 解释,可在控制台下运行。可用文本编辑器读写。

Python中经常使用的文件后缀名:

pyc

以 pyc 为扩展名的是Python的编译文件。其执行速度快于 py 文件且不能用文本编辑编辑查看。所以 pyc 文件往往代替 py 文件发布。

Python 在执行时,首先会将 py 文件中的源代码编译成 PyCodeObject 写入 pyc 文件,再由虚拟机执行 PyCodeObject。

当 Python 执行 import 时会先寻找对应的 pyc或 pyd(dll)文件,如果没有则将对应的py文件编译写入 pyc 文件。pyc文件也可以通过 python -m py_compile src.py 生成。

pyw

pyw 文件与 pyc 文件相似,但 pyw 执行的时候不会出控制台窗口。开发(纯图形界面程序)时可以暂时把 pyw 改成 py 以调出控制台窗口调试。

pyo

pyo 是优化编译后的程序,不能用文本编辑器编辑。 python -O source.py 即可将源程序编译为 pyo 文件。

pyd

pyd 一般是 Python 外的其他语言如 C/C++ 编写的 Python 扩展模块,即 Python 的一个动态连接库,与 dll 文件相当。在Linux系统中一般为.so文件

当需要采用调用c++的程序的时候,需要对原有的数据加一个extern “C”封装一下即可。

采用g++编译的代码也需要的,原因可能是因为c++编译器编译后的二进制so文件中,对c++的函数进行了重新的命名导致的。

extern “C” {

Foo* Foo_new(){ return new Foo(); }

void Foo_bar(Foo* foo){ foo-bar(); }

}

以下两个网页又更详细的介绍

最后需要补充的一个问题是:当我调用so文件的时候,会发生一个有趣的现象:

我把python放到streaming找运行的时候,发现streaming始终查找不到so,但是数据却是被上传到hadoop的对应的work目录下。

后来定位到原因:

是python加载动态库方面是默认从系统lib库上查找库文件。

我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

可以

一、环境准备

安装cython,以及gcc编译环境

wget get-pip.py

python get-pip.py

pip install cython

yum install -y gcc python-devel

二、编写测试脚本

test.py,内容如下

import os

def test():

print os.path.realpath(‘.’)

三、将其拷贝到python系统路径

/usr/lib/python2.7/site-packages/test

在test目录下创建__init__.py, 与 test.py 的文件

test.py 上面内容如上所示

四、脚本测试

python

import lyh.test

lyh.test.test()

五、编译so文件

以下操作均在 /usr/lib/python2.7/site-packages/test 路径下执行

1. cython test.py

2. gcc -c -fPIC -I/usr/include/python2.7/ test.c

3. gcc -shared test.o -o test.so

六、验证so文件的可用性

1. 移除/usr/lib/python2.7/site-packages/test/test.py 文件,只保留 test.so文件

test

├── __init__.py

└── test.so

2.

python

import test.test

test.test.test()

可以执行

验证完成

七、使用setup.py 编译so

1. 编写setup.py文件,位于/usr/lib/python2.7/site-packages/test,内容如下:

from distutils.core import setup

from Cython.Build import cythonize

setup(

ext_modules = cythonize(“test.py”)

)

2.然后运行

setup.py build_ext –inplace

除了GUI程序,其它类型的没有特殊的后缀。

例如:

利用py2exe模块

hello.py 代码

print ‘hello,world!du’

raw_input(‘Press enter’)

配置 setup.py 代码

from distutils.core import setup

import py2exe

setup(console=[‘hello.py’])

最后你将两个文件存放在一块。在cmd下执行 c:\pythonx.x\python setup.py py2exe

也有其它库完成daoexe。如:PyInstaller+pywin32

扩展资料:

Python在执行时,会将py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。

Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。

参考资料来源:百度百科-Python

openstack是最近3年学习python的人最值得学习的一个云计算框架。 OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/126291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点简单一点
上一篇 2024-10-03 23:07
下一篇 2024-10-03 23:07

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29

发表回复

登录后才能评论