当前位置:首页 » 编程语言 » pythonso

pythonso

发布时间: 2022-01-15 15:07:44

1. python有哪些黑魔法

1.ipython+ctypes:调试/测试LinuxAPI的交互式运行环境ipython是最好的REPL!(我喜欢Python,至少有30%的好感来自ipython)REPL的好处不言自明,在开发和调试时能大大的提高效率。尤其是需要对API进行快速验证时。我最早是用gdb来做一些REPL的事情,但毕竟操作复杂,交互式功能有限。而用ctypes,就爽快多了,ctypes可以直接人so中提取出函数,在Python层面稍加包装,就能直接使用,不用编译/连接,保持运行状态,结果出来直接用Python分析……简直是画面太美真实场景:我们的运营环境有数十万host,host上去除了编译环境,某一天,我们对某个系统调用的返回产生怀疑。于是,按照通常的作法,在开发机上写一个示例程序,编译,拷贝到运营机,运行,反复执行这一个过程。那么有了ctypes,直接在python/ipython的REPL里调试就好了。还不容易留下可疑的可执行程序。2.ctypes作为胶水ctypes增强了python作为胶水语言的能力,从进程调用/统一协议级别的脱水直接深入到二进制级别的脱水。这样看来,C++对C的兼容就显得没那么重要了真实场景:某个执行框架,插件以so的形式提供,so提供固定的函数入口。重构时打算去除语言耦合,改用进程调用的方式调用插件(类似于cgiserver,这样可以减少对插件编写的限制,插件本身也更容易测试,防止so崩溃造成框架整体崩溃)。但是很多插件的作者已离职,于是只需要框架额外增加从so里调用函数出来即可,做到平滑升级。3.ctypes与系统编程ctypes作为一种轻量并且内置的c语言“代理”,使得python极大地增强了系统编程的能力。从此,系统编程的代码也可以变得更加优雅。真实场景:sdn/vpc方案需要对内核协议栈做较多的调整,从管理的层面上,网络配置由中央控制并下发。因此,host上存在一个daemon,一方面要接受zookeeper的配置变更通知,另一方面要把配置解析后通过netlink与内核通信。这个daemon大概几乎没有人会用python去做。但是我看到iotop里用到ctypes对netlink接口的封装,惊为天人,并且python更加适合对配置解析与处理。我斗胆用python实现了这个daemon,调试起来如丝般顺滑,然后就减少了好几个月的加班。转自:http://www.hu.com/question/29995881

2. python怎么调用安卓的.so文件

调用不了的,CPU架构都不一样,一个是x86指令集,一个是arm指令集,怎么调?
就算是指令集一样的,你windows的程序也调用不了Linux的so库。

3. python 怎么调用so文件

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

采用g++编译的代码也需要的,原因可能是因为c++编译器编译后的二进制so文件中,对c++的函数进行了重新的命名导致的。
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
以下两个网页又更详细的介绍
http://blog.waterlin.org/articles/using-python-ctypes-to-link-cpp-library.html

http://stackoverflow.com/questions/145270/calling-c-c-from-python

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

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

后来定位到原因:

是python加载动态库方面是默认从系统lib库上查找库文件。
我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

4. python加载so和dll的区别

python 调用so dll动态链接库
http://blog.csdn.net/ngvjai/article/details/7961051

5. 为什么python下无法import so文件

so文件不是import的,是使用CDLL加载的。

比如我加载一个和这个py文件同目录的so库:

importos
fromctypesimport*;
libMyFunc=CDLL(os.path.join(os.path.dirname(__file__),"myfunc.so"))

6. python *.so 文件 怎么生成的

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

7. 如何查看python的.so后缀的模块

.so是C++或者C生成的lib库,是编译而成的,不是python生成的,看不了。

8. centos下python调用.so有哪几种方式

先到https://pypi.python.org/pypi/MySQL-python/1.2.5里下好源码包,然后分步骤便已安装: tar zxvf MySQL-python-1.2.5.tar.gzcd MySQL-python-1.2.5python setup.py install

9. python调用动态库(并且动态库依赖其它动态库)

用depends看一下导出了没有?一般只要标准格式导出就可以使用的。

10. 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_moles = cythonize("test.py")
)
2.然后运行
setup.py build_ext --inplace

热点内容
安卓上哪里下大型游戏 发布:2024-12-23 15:10:58 浏览:186
明日之后目前适用于什么配置 发布:2024-12-23 14:56:09 浏览:51
php全角半角 发布:2024-12-23 14:55:17 浏览:826
手机上传助手 发布:2024-12-23 14:55:14 浏览:730
什么样的主机配置吃鸡开全效 发布:2024-12-23 14:55:13 浏览:828
安卓我的世界114版本有什么 发布:2024-12-23 14:42:17 浏览:708
vbox源码 发布:2024-12-23 14:41:32 浏览:275
诗经是怎么存储 发布:2024-12-23 14:41:29 浏览:657
屏蔽视频广告脚本 发布:2024-12-23 14:41:24 浏览:417
php解析pdf 发布:2024-12-23 14:40:01 浏览:816