1 Star 0 Fork 0

pankla/pyside6_demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
build.py 2.47 KB
一键复制 编辑 原始数据 按行查看 历史
pankla 提交于 2023-02-27 12:04 +08:00 . - Update: 更新README
import os
import re
import shutil
from setuptools import setup
from typing import List
from Cython.Build import cythonize
# 相关路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TARGET_DIR = os.path.join(BASE_DIR, 'dist/dll')
C_SOURCE_DIR = os.path.join(BASE_DIR, 'dist/c_source')
# Cython 编译参数
COMPILER_DIRECTIVES = {
'language_level': 3,
'always_allow_keywords': True,
'annotation_typing': False
}
def execute(source_dir: str, module_names: List[str]):
"""编译执行,清理环境"""
# 源文件绝对路径,目标文件绝对路径,构建文件夹临时路径,生成的C源代码文件转移目标路径
source_abstract_dir = os.path.join(BASE_DIR, source_dir)
target_abstract_dir = os.path.join(TARGET_DIR, source_dir)
build_dir = os.path.join(source_abstract_dir, 'build')
c_source_abstract_dir = os.path.join(C_SOURCE_DIR, source_dir)
os.makedirs(source_abstract_dir, exist_ok=True)
os.makedirs(target_abstract_dir, exist_ok=True)
os.makedirs(c_source_abstract_dir, exist_ok=True)
# 切换至目录
os.chdir(source_abstract_dir)
# 执行
setup(
ext_modules=cythonize(module_names, quiet=True, compiler_directives=COMPILER_DIRECTIVES)
)
# 清理,转移
for name in os.listdir(source_abstract_dir):
# 转移 C 文件
if name.endswith('.c'):
shutil.move(os.path.join(source_abstract_dir, name), os.path.join(c_source_abstract_dir, name))
# 转移并重命名动态链接库
if name.endswith('.so') or name.endswith('.pyd'):
new_filename = re.sub(r'(.*)\..*\.(.*)', r'\1.\2', name)
shutil.move(os.path.join(source_abstract_dir, name), os.path.join(target_abstract_dir, new_filename))
# 删除临时 build 文件夹
if os.path.isdir(build_dir):
shutil.rmtree(build_dir)
# 切换目录
os.chdir(BASE_DIR)
# 被编译模块路径
file_params = [
{
'dir_name': 'apps',
'module_names': [
'const.py',
'log.py',
'setting.py',
'signal.py',
'work.py'
]
},
{
'dir_name': 'apps/views',
'module_names': [
'main.py',
'setting.py'
]
},
{
'dir_name': 'apps/threads',
'module_names': [
'main.py',
'setting.py'
]
}
]
for file_param in file_params:
execute(file_param.get('dir_name'), file_param.get('module_names'))
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/pankla/pyside6_demo.git
git@gitee.com:pankla/pyside6_demo.git
pankla
pyside6_demo
pyside6_demo
master

搜索帮助