[英]Installing shared library with python package not separately
我已經成功構建了一個 Python 包,該包使用 CMake 與 pybind11 相結合來創建共享對象( .so
- 假設目前僅使用 Linux)文件。 該實現有效,但我無法使用pip uninstall .
刪除此共享對象文件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 .
時創建的文件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"])]
這將使 .so 被 Python 包管理器跟蹤。 第一個字符串是相對於安裝前綴的目錄。 第二個字符串是發行版中的 .so 文件,相對於 setup.py 腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.