當前位置:首頁 » 編程語言 » 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

熱點內容
linux驅動spi 發布:2024-12-23 13:25:22 瀏覽:114
王思聰為什麼配伺服器 發布:2024-12-23 13:19:48 瀏覽:373
安卓型號代表什麼 發布:2024-12-23 13:13:29 瀏覽:779
改密碼哪裡加問題 發布:2024-12-23 13:11:43 瀏覽:864
安卓手機多開哪個不卡 發布:2024-12-23 13:10:16 瀏覽:588
源碼反碼補碼 發布:2024-12-23 13:09:25 瀏覽:259
方向演算法 發布:2024-12-23 13:09:16 瀏覽:42
為什麼安卓充電線充不上電了 發布:2024-12-23 13:06:14 瀏覽:223
配置管理由什麼組成 發布:2024-12-23 12:57:47 瀏覽:560
運動版雅閣有哪些配置 發布:2024-12-23 12:57:45 瀏覽:277