我想使用distutils构建一个静态Cython库。我不关心它是一个可以导入的真正的Python扩展模块。我只想编译代码并将对象放在静态库中。创建动态库的代码非常简单,
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext':build_ext},
ext_modules = [Extension("test",["test.pyx"])]
)
是否有一种简单的方法可以让它变为静态?
答案 0 :(得分:2)
Distutils非常有限,并未针对静态构建进行设置。我建议你使用其他东西来编译项目的静态库部分。
如果您的用例是从其他C代码调用Cython代码,那么您希望在Cython代码中使用public
or api
declarations以及cdef
声明的函数和变量。 Cython将允许从外部C代码调用如此声明的对象,它将为.h
文件生成一个.c
文件。
答案 1 :(得分:1)
Fyi,这可以使用numpy distutils
,但显然远不及共享库的原始代码的简单性或可能的可移植性,
from Cython.Compiler.Main import compile
from numpy.distutils.misc_util import Configuration
compile('test.pyx')
config = Configuration(...)
config.add_installed_library('test',
['test.c'],
'test',
{'include_dirs':[get_python_inc()]})
答案 2 :(得分:0)
假设您的setup.py中有import { Component, OnInit, AfterContentInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-root',
template: '<router-outlet></router-outlet>'
})
export class AppComponent implements OnInit {
constructor(translate: TranslateService) {
translate.addLangs(['es']);
translate.setDefaultLang('es');
const browserLang: string = translate.getBrowserLang();
translate.use(browserLang.match(/en|es/) ? browserLang : 'es');
}
ngOnInit() {
}
}
,sources
和include_dirs
,这就是构建静态库的方法
build_dir
来源:https://gist.github.com/udnaan/d549950a33fd82d13f9e6ba4aae82964