首页 > 编程知识 正文

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

时间:2023-12-02 00:20:20 阅读:311154 作者:XDLM

本文目录一览:

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

python源代码程序文件扩展名

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文件

python 怎么调用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

python程序py文件能做成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

能否介绍一下用python编写和编译文件后的后缀名的意思吗?

除了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.xpython 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

python *.so 文件 怎么生成的

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。