代码拉取完成,页面将自动刷新
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'))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。