为二进制扩展扩展扩展setuptools的python库。
milksnake的Python项目详细描述
#milksnake
<;a href=“https://pypi.python.org/pypi/milksnake”>;<;img src=“https://img.shields.io/pypi/v/milksnake.svg”alt=“”>;<;/a>;
<;a href=“https://travis ci.org/getsentry/milksnake”>;<;img src=“https://travis-ci.org/getsentry/milksnake.svg?branch=master“a lt=”>;<;a ref=”https://github.com/getsentry/milksnake/blob/master/license“>;<;img src=”https://img.shields.io/pypi/l/milksnake.svg“alt=”>;
milksnake是setuptools的扩展,允许您以最可移植的方式在python轮中分发动态链接库。可以想象。
它为您提供了一个钩子来调用自己的构建过程,然后获取生成的动态链接库。
已经有其他项目使python和本机库一起运行,但这一个不同。与构建python
扩展模块的其他项目不同,此项目的目标是构建常规的本地库,然后在运行时用cffi加载这些库。为什么不直接使用cffi呢?因为
cffi的setuptools支持本身不能正确地使用这些控制盘(它不能为共享库提供构建和正确标记控制盘的方法),而且
它也不能提供调用外部构建过程的好方法(如
makefile,构建rust二进制文件等)
*平台:Linux、Mac、Windows
*setuptools命令:`bdist_wheel`、`build`、`build_ext`、`develop`
*`pip install--可编辑。`
*通用控制盘(`package-py2.py3 none platform.whl`);如果包中还包含与libpython链接的
此示例显示如何使用它生成rust项目:
path='./rust'
)
spec.add_cffi_module(
module_path='example.'u native',
dylib=lambda:build.find_dylib('example',in_path='target/release'),
header_filename=lambda:build.find_header('example.h',in_path='target'),
rtld_flags=['now',“nodelite”]
)
安装(
名称='example',
版本='0.0.1',
软件包=['example'],
压缩安全=false,
平台='any',
安装程序需要=['milksnake'],
安装程序需要=['milksnake'],
milksnake_tasks=[
build_native
]
)
`````
lib
def test():
32{
42
/>```
,最后是build.rs文件:
``生锈
外部板条箱cbindgen;
使用std::env;
让板条箱dir=env::var(“货物清单dir”).unwrap();
让mut config:cbindgen::config=default::default();
config.language=cbindgen::language::c;
cbindgen::使用配置(crate-dir,config)
.unwrap()
.write-to-u文件(“target/example.h”);
}
````
<;a href=“https://pypi.python.org/pypi/milksnake”>;<;img src=“https://img.shields.io/pypi/v/milksnake.svg”alt=“”>;<;/a>;
<;a href=“https://travis ci.org/getsentry/milksnake”>;<;img src=“https://travis-ci.org/getsentry/milksnake.svg?branch=master“a lt=”>;<;a ref=”https://github.com/getsentry/milksnake/blob/master/license“>;<;img src=”https://img.shields.io/pypi/l/milksnake.svg“alt=”>;
milksnake是setuptools的扩展,允许您以最可移植的方式在python轮中分发动态链接库。可以想象。
它为您提供了一个钩子来调用自己的构建过程,然后获取生成的动态链接库。
已经有其他项目使python和本机库一起运行,但这一个不同。与构建python
扩展模块的其他项目不同,此项目的目标是构建常规的本地库,然后在运行时用cffi加载这些库。为什么不直接使用cffi呢?因为
cffi的setuptools支持本身不能正确地使用这些控制盘(它不能为共享库提供构建和正确标记控制盘的方法),而且
它也不能提供调用外部构建过程的好方法(如
makefile,构建rust二进制文件等)
*平台:Linux、Mac、Windows
*setuptools命令:`bdist_wheel`、`build`、`build_ext`、`develop`
*`pip install--可编辑。`
*通用控制盘(`package-py2.py3 none platform.whl`);如果包中还包含与libpython链接的
此示例显示如何使用它生成rust项目:
path='./rust'
)
spec.add_cffi_module(
module_path='example.'u native',
dylib=lambda:build.find_dylib('example',in_path='target/release'),
header_filename=lambda:build.find_header('example.h',in_path='target'),
rtld_flags=['now',“nodelite”]
)
安装(
名称='example',
版本='0.0.1',
软件包=['example'],
压缩安全=false,
平台='any',
安装程序需要=['milksnake'],
安装程序需要=['milksnake'],
milksnake_tasks=[
build_native
]
)
`````
lib
def test():
32{
42
/>```
,最后是build.rs文件:
``生锈
外部板条箱cbindgen;
使用std::env;
让mut config:cbindgen::config=default::default();
config.language=cbindgen::language::c;
cbindgen::使用配置(crate-dir,config)
.unwrap()
.write-to-u文件(“target/example.h”);
}
````