from setuptools import setup from setuptools.extension import Extension from Cython.Distutils import build_ext from Cython.Build import cythonize import numpy from pathlib import Path import shutil import sys class MyBuildExt(build_ext): def run(self): build_ext.run(self) build_dir = Path(self.build_lib) root_dir = Path(__file__).parent target_dir = build_dir if not self.inplace else root_dir self.copy_file(Path('./WindSpeedTools') / '__init__.py', root_dir, target_dir) #self.copy_file(Path('./pkg2') / '__init__.py', root_dir, target_dir) self.copy_file(Path('.') / '__init__.py', root_dir, target_dir) def copy_file(self, path, source_dir, destination_dir): if not (source_dir / path).exists(): return shutil.copyfile(str(source_dir / path), str(destination_dir / path)) # 判断平台和编译器,选择正确的OpenMP标志 compile_args = [] link_args = [] if sys.platform == "win32": # 在Windows上使用MSVC编译器 compile_args = ['/openmp'] # 仅传递给编译器 # 链接器不需要此选项,因此 link_args 为空 else: # 在Linux/macOS上使用GCC/Clang编译器 compile_args = ['-fopenmp'] link_args = ['-fopenmp'] # 对于GCC,通常需要同时传递给编译器和链接器 setup( name="MyModule", ext_modules=cythonize( [ #Extension("pkg1.*", ["root/pkg1/*.py"]), Extension("pkg2.*", ["WindSpeedModel.pyx"], # 添加OpenMP支持 extra_compile_args=compile_args, # 选项只给编译器 extra_link_args=link_args, # 链接器使用单独的选项列表 ), #Extension("1.*", ["root/*.py"]) ], build_dir="build", compiler_directives=dict( always_allow_keywords=True )), cmdclass=dict( build_ext=MyBuildExt ), packages=[], include_dirs=[numpy.get_include()], ) # 指令: python setup.py build_ext --inplace