- 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/zh-tw/n/126291.html