不单独使用python包安装共享库

2024-04-25 17:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地构建了一个Python包,它使用CMake和pybind11创建了一个共享对象(.so——假设目前只使用Linux)文件。实现工作正常,但我无法使用pip uninstall .删除此共享对象文件

我在setup.py文件中的setup命令看起来像是从pybind/cmake_example存储库中获取的:

setup(
    name='package',
    version='0.0.1',
    author='-',
    author_email='-',
    description='A test project using pybind11 and CMake',
    long_description='',
    ext_modules=[CMakeExtension('packagebindings')],
    cmdclass=dict(build_ext=CMakeBuild),
    zip_safe=False,
    packages=setuptools.find_packages()
)

我的CMakeLists.txt文件有一条install指令,如下所示:

install(TARGETS packagebindings COMPONENT python LIBRARY DESTINATION ${Python_SITELIB})

总之,以下是运行pip install .时创建的文件:

  • path/to/site-packages/package/*-被pip uninstall package删除
  • path/to/site-packages/package-0.0.1.dist-info/*-被pip uninstall package删除
  • path/to/site-packages/packagebindings.cpython-37m-x86_64-linux-gnu.so-在{}之后仍然存在

我想知道如何使运行pip uninstall .删除.so文件

如果需要进一步的MRE,我可以链接到存储库


Tags: installpip文件topath对象cmakepackage
1条回答
网友
1楼 · 发布于 2024-04-25 17:36:15

您的CMake安装目标似乎将.so直接放入python安装目录(DESTINATION ${Python_SITE_LIB})。我猜这会阻止.so被Python注册,所以卸载时不会删除它。我建议让CMake将.so放在分发目录中,然后将以下选项添加到setup()

data_files = [("installation_bin", ["distribution_bin/library.so"])]

这将允许Python包管理器跟踪.so。第一个字符串是相对于安装前缀的目录。第二个字符串是发行版中相对于setup.py脚本的.so文件

相关问题 更多 >