国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

Python 項目轉化為so文件實例

2024-09-09 19:03:26
字體:
來源:轉載
供稿:網友

思路是先將py轉換為c代碼,然后編譯c為so文件,所以要安裝以下內容:

python 安裝:cython

pip install cython

linux 安裝:python-devel,gcc

yum install python-develyum install gcc

初步編譯

新建Test.py文件,內容如下

class test:    def __init__(self):    print('init')  def say(self):    print ('hello')

新建setup.py,內容如下

from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules = cythonize(["Test.py"]))

在bash中執行

python setup.py build_ext

運行后會生成build文件夾,如下

現在so文件就可以像普通py文件一樣導入了

集成編譯

做了以下內容:

1.文件夾編譯

2.刪除編譯出的.c文件

3.刪除編譯的temp文件夾

將需要編譯的目錄和setup.py放在同一層級,執行python setup.py,so文件在build目錄下

setup.py代碼如下:

'''Created on 2019年3月27日@author: hylink'''#-* -coding: UTF-8 -* -"""執行前提:  系統安裝python-devel 和 gcc  Python安裝cython編譯整個當前目錄:  python py-setup.py編譯某個文件夾:  python py-setup.py BigoModel生成結果:  目錄 build 下生成完成后:  啟動文件還需要py/pyc擔當,須將啟動的py/pyc拷貝到編譯目錄并刪除so文件"""import sys, os, shutil, timefrom distutils.core import setupfrom Cython.Build import cythonizestarttime = time.time()currdir = os.path.abspath('.')parentpath = sys.argv[1] if len(sys.argv)>1 else ""setupfile= os.path.join(os.path.abspath('.'), __file__)build_dir = "build"build_tmp_dir = build_dir + "/temp"def getpy(basepath=os.path.abspath('.'), parentpath='', name='', excepts=(), copyOther=False,delC=False):  """  獲取py文件的路徑  :param basepath: 根路徑  :param parentpath: 父路徑  :param name: 文件/夾  :param excepts: 排除文件  :param copy: 是否copy其他文件  :return: py文件的迭代器  """  fullpath = os.path.join(basepath, parentpath, name)  for fname in os.listdir(fullpath):    ffile = os.path.join(fullpath, fname)    #print basepath, parentpath, name,file    if os.path.isdir(ffile) and fname != build_dir and not fname.startswith('.'):      for f in getpy(basepath, os.path.join(parentpath, name), fname, excepts, copyOther, delC):        yield f    elif os.path.isfile(ffile):      ext = os.path.splitext(fname)[1]      if ext == ".c":        if delC and os.stat(ffile).st_mtime > starttime:          os.remove(ffile)      elif ffile not in excepts and os.path.splitext(fname)[1] not in('.pyc', '.pyx'):        if os.path.splitext(fname)[1] in('.py', '.pyx') and not fname.startswith('__'):          yield os.path.join(parentpath, name, fname)        elif copyOther:            dstdir = os.path.join(basepath, build_dir, parentpath, name)            if not os.path.isdir(dstdir): os.makedirs(dstdir)            shutil.copyfile(ffile, os.path.join(dstdir, fname))    else:      pass#獲取py列表module_list = list(getpy(basepath=currdir,parentpath=parentpath, excepts=(setupfile)))try:  setup(ext_modules = cythonize(module_list),script_args=["build_ext", "-b", build_dir, "-t", build_tmp_dir])except Exception as e:  print (e)else:  module_list = list(getpy(basepath=currdir, parentpath=parentpath, excepts=(setupfile), copyOther=True))module_list = list(getpy(basepath=currdir, parentpath=parentpath, excepts=(setupfile), delC=True))if os.path.exists(build_tmp_dir): shutil.rmtree(build_tmp_dir)print ("complate! time:", time.time()-starttime, 's')
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐市| 绵竹市| 商水县| 乐东| 霞浦县| 阳原县| 陈巴尔虎旗| 如东县| 沙坪坝区| 海林市| 衡阳市| 林州市| 贞丰县| 日喀则市| 乌拉特前旗| 怀集县| 右玉县| 西畴县| 南汇区| 娄底市| 镇坪县| 芦溪县| 温泉县| 仙游县| 大英县| 河北区| 延庆县| 额尔古纳市| 安福县| 青浦区| 涿鹿县| 库尔勒市| 云和县| 晴隆县| 铁力市| 青川县| 皮山县| 清水河县| 内黄县| 阿拉善左旗| 顺昌县|