python的setup.py文件


最近工作需要,用Cython寫了*.pyx擴展,並將其編譯成C文件,最后轉換為so擴展,供python引用
使用 distutils 編譯,建立一個setup.py 的腳本
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name = 'cython_build_test’, 
cmdclass = {'build_ext':build_ext},
ext_modules = ext_modules 

關於setup函數的一些參數:
1、name
site-package安裝目錄下的egg文件:/usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info,如果不指定,將會與UNKNOW命名:/usr/lib64/python2.6/site-packages/UNKNOWN-0.0.0-py2.6.egg-info

2、packages告訴Distutils需要處理那些包(包含__init__.py的文件夾)

3、package_dirs告訴Distutils哪些目錄下的文件被映射到哪個源碼包。一個例子:package_dir = {‘’:lib},表示“root package”中的模塊都在lib目錄4、ext_modules是一個包含Extension實例的列表,Extension的定義也有一些參數,定義如下

5、ext_package定義extension的相對路徑

6、requires定義依賴哪些模塊

7、provides定義可以為哪些模塊提供依賴

8、scripts指定python源碼文件,可以從命令行執行。在安裝時指定—install-script

9、package_data通常包含與包實現相關的一些數據文件或類似於readme的文件。如果沒有提供模板,會被添加到MANIFEST文件中。

10、data_files指定其他的一些文件(如配置文件)


關於ext_modules參數詳細說明:

定義Extension實例列表,

\\

1、name
擴展包的名字,供python導入impZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcnTKscq508M8L3N0cm9uZz48YnI+CjxzdHJvbmc+MqGic291cmNlPC9zdHJvbmc+PGJyPgo8c3Ryb25nPtS0zsS8/tfps8m1xMHQse2jrNS0zsS8/r/J0tTKx0OjrEMmIzQzOyYjNDM7tcjM2LaotcTXytS0zsS8/qOsu/LIzrrOxuTL+9PJYnVpbGRfZXh0w/zB7si3yM/OqsC01LTOqlB5dGhvbsCp1bmhozwvc3Ryb25nPjxicj4KPHN0cm9uZz4zoaJsYW5ndWFnZTwvc3Ryb25nPjxicj4KPHN0cm9uZz7AqdW50+/R1MP7s8Y8L3N0cm9uZz48YnI+CjxwPjxzdHJvbmc+NKGiaW5jbHVkZV9kaXJzPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPszhuanL0cv3Qy9DJiM0MzsmIzQzO823zsS8/rXExL/CvNfps8m1xMHQse2jqLHIyOejuiouaKOpPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPjxpbWcgc3JjPQ=="" alt="\">\

 

\
5、library_dirs

提供搜索C/C++庫文件的目錄組成的列表(比如:*.a)

\\

\
6、libraries

庫名(不是文件名或路徑)的組成的列表

\\

\
簡單的setup.py文件:
\
\\

(1)

運行setup.py,傳遞參數build_ext,選項—inplace

python setup.py build_ext —inplace
系統報告:
running build_ext
cythoning import_cython_c_math.pyx to import_cython_c_math.c
building "import_cython_c_math' extension
creating build
creating build/temp.linux-x86_64-2.6
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.6 -c import_cython_c_math.c -obuild/temp.linux-x86_64-2.6/import_cython_c_math.o
gcc -pthread -shared build/temp.linux-x86_64-2.6/import_cython_c_math.o -L/usr/lib64 -lpython2.6 -o /home/linshaowei/cython_setup_test/import_cython_c_math.so
此時:
當前目錄下自動創建了:
build目錄
進入到build目錄里,有一個目錄: temp.linux-x86_64-2.6,該目錄里面存放了import_cython_c_math.o文件,該文件是c代碼編譯之后的包含0,1指令的對象文件(即c語音編譯之后的文件)
import_cython_c_math.so,其次是生成供python直接引用的動態鏈接庫,是一個鏈接文件
此時就可以在python引用該庫文件了。

(2)
運行setup.py,傳遞參數build(編譯)
python setup.py build
系統報告:
running build
running build_ext
cythoning import_cython_c_math.pyx to import_cython_c_math.c
building 'import_cython_c_math' extension
creating build
creating build/temp.linux-x86_64-2.6
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python2.6 -c import_cython_c_math.c -o build/temp.linux-x86_64-2.6/import_cython_c_math.o
creating build/lib.linux-x86_64-2.6
gcc -pthread -shared build/temp.linux-x86_64-2.6/import_cython_c_math.o -L/usr/lib64 -lpython2.6 -o build/lib.linux-x86_64-2.6/import_cython_c_math.so
此時,
當前目錄下自動創建了:
build目錄
進入到build目錄,有兩個目錄:
lib.linux-x86_64-2.6該目錄里面存放:import_cython_c_math.so文件
temp.linux-x86_64-2.6該目錄里面存放:import_cython_c_math.o文件

sudo python setup.py install(安裝)
running install
running build
running build_ext
skipping 'import_cython_c_math.c' Cython extension (up-to-date)
running install_lib
copying build/lib.linux-x86_64-2.6/import_cython_c_math.so -> /usr/lib64/python2.6/site-packages
running install_egg_info
Writing /usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info
install參數,將動態鏈接文件 build/lib.linux-x86_64-2.6/import_cython_c_math.so創建了軟鏈接/usr/lib64/python2.6/site-packages
再寫入Writing /usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info python安裝目錄,生成了egg文件並存放到安裝目錄,就意味着python可以隨處引用它


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM