簡體   English   中英

不單獨安裝帶有python包的共享庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM