如何解决不单独使用python软件包安装共享库
我已经成功构建了一个将CMake与pybind11结合使用的Python包,以创建共享对象(.so
-假设目前仅使用Linux)文件。该实现有效,但是我无法使用pip uninstall .
我在setup
文件中的setup.py
命令看起来像是从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 package
之后仍然存在
我想知道如何制作它,以便运行pip uninstall .
会删除.so
文件。
如果需要进一步的MRE,我可以链接到存储库。
解决方法
您的CMake安装目标似乎将.so直接放置在python安装目录(DESTINATION ${Python_SITE_LIB}
)中。我猜测这会阻止.so被Python正确注册,因此在卸载时不会将其删除。我建议使CMake将.so放在分发目录中,然后将以下选项添加到setup()
:
data_files = [("installation_bin",["distribution_bin/library.so"])]
这将使Python包管理器跟踪.so。第一个字符串是相对于安装前缀的目录。第二个字符串是您发行版中的.so文件,相对于setup.py脚本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。