gpt4 book ai didi

python - 更改 Cython 对 .so 文件的命名规则

转载 作者:太空狗 更新时间:2023-10-29 20:47:11 32 4
gpt4 key购买 nike

我正在使用 Cython 从 Python 模块中生成一个共享对象。编译输出写入 build/lib.linux-x86_64-3.5/<Package>/<module>.cpython-35m-x86_64-linux-gnu.so .是否有更改命名规则的选项?我希望将文件命名为 <module>.so没有解释器版本或 arch 附录。

最佳答案

似乎 setuptools 没有提供更改或完全删除后缀的选项。魔法发生在 distutils/command/build_ext.py 中:

def get_ext_filename(self, ext_name):
from distutils.sysconfig import get_config_var
ext_path = ext_name.split('.')
ext_suffix = get_config_var('EXT_SUFFIX')
return os.path.join(*ext_path) + ext_suffix

看来我需要添加一个构建后重命名操作。


2016 年 8 月 12 日更新:

好吧,我忘了实际发布解决方案。实际上,我通过重载内置的 install_lib 命令来实现重命名操作。逻辑如下:

from distutils.command.install_lib import install_lib as _install_lib

def batch_rename(src, dst, src_dir_fd=None, dst_dir_fd=None):
'''Same as os.rename, but returns the renaming result.'''
os.rename(src, dst,
src_dir_fd=src_dir_fd,
dst_dir_fd=dst_dir_fd)
return dst

class _CommandInstallCythonized(_install_lib):
def __init__(self, *args, **kwargs):
_install_lib.__init__(self, *args, **kwargs)

def install(self):
# let the distutils' install_lib do the hard work
outfiles = _install_lib.install(self)
# batch rename the outfiles:
# for each file, match string between
# second last and last dot and trim it
matcher = re.compile('\.([^.]+)\.so$')
return [batch_rename(file, re.sub(matcher, '.so', file))
for file in outfiles]

现在你所要做的就是重载setup函数中的命令:

setup(
...
cmdclass={
'install_lib': _CommandInstallCythonized,
},
...
)

不过,我对重载标准命令并不满意;如果您找到更好的解决方案,请发布,我会接受您的回答。

关于python - 更改 Cython 对 .so 文件的命名规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523941/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com