python-pcl 安装指南:从环境配置到问题排查

python-pcl 安装指南:从环境配置到问题排查

项目简介

python-pcl 是 Point Cloud Library (PCL) 的 Python 绑定,为开发者提供了在 Python 环境中处理点云数据的能力。PCL 是一个开源的 C++ 库,广泛应用于 3D 点云处理、计算机视觉和机器人领域。

推荐环境配置

操作系统支持

python-pcl 支持以下主流操作系统:

  • Linux:推荐 Ubuntu 16.04/18.04 64位版本
  • MacOS:支持 10.9 至 10.12 版本
  • Windows:支持 7/8.1/10 64位系统

Python 版本要求

支持以下 Python 版本:

  • Python 2.7.6+
  • Python 3.5.1+
  • Python 3.6.0+

各平台安装指南

Linux (Ubuntu) 安装

方法一:使用 apt 安装 PCL 1.7.2
  1. 安装 PCL 核心模块:
sudo apt install libpcl-dev -y
方法二:编译安装 PCL 1.8.0

需要从源码编译 PCL 模块,具体编译方法参考官方文档。

MacOS 安装

使用 Homebrew 进行安装:

  1. 添加科学计算仓库:
brew tap homebrew/science
  1. 安装 PCL:
brew install pcl

注意:当前安装器可能不会生成 pcl-2d-1.8.pc 文件,需要手动解决。

Windows 安装

Windows 安装相对复杂,需要根据 PCL 版本选择不同配置:

PCL 1.6.0 安装
  • 需要 Windows SDK 7.1
  • 使用 PCL All-In-One Installer
  • 安装 OpenNI2
PCL 1.8.1 安装
  • 需要 Visual Studio 2015 C++ 编译器
  • 使用 PCL All-In-One Installer
  • 安装 OpenNI2

通用设置

  1. 设置环境变量 PCL_ROOT 指向 PCL 安装目录
  2. 更新 PATH 环境变量包含必要的二进制路径

依赖管理

安装 python-pcl 前需要确保以下依赖:

  1. 更新 setuptools:
pip install -U setuptools
  1. 核心依赖:
  • PointCloudLibrary (1.6.x - 1.9.x)
  • NumPy (1.9+)
  • Cython (≥0.25.2)

安装 python-pcl

推荐方法:使用 pip 安装

最简单的方法是使用 pip 直接安装:

pip install python-pcl

注意:所有 PCL 相关库必须在安装 python-pcl 前安装完成。更新这些库后需要重新安装 python-pcl。

从源码安装

  1. 下载源码包并解压
  2. 进入解压目录
  3. 运行安装命令:
python setup.py install

开发者模式安装

开发者需要安装 Cython 以重新生成 C++ 源码:

pip install -U cython
cd /path/to/python-pcl/source
pip install -e .

常见问题处理

安装错误排查

遇到安装错误时,使用 -vvvv 参数获取详细日志:

pip install python-pcl -vvvv

卸载 python-pcl

使用 pip 卸载:

pip uninstall python-pcl

注意:升级时 pip 可能不会移除旧版本,需要多次执行卸载命令确保完全移除。

升级 python-pcl

使用 -U 参数升级:

pip install -U python-pcl

重新安装

建议先卸载再安装,并使用 --no-cache-dir 避免缓存问题:

pip uninstall python-pcl
pip install python-pcl --no-cache-dir

最佳实践建议

  1. 环境隔离:建议使用 virtualenv 或 conda 创建独立环境安装
  2. 版本匹配:确保 PCL 版本与 python-pcl 版本兼容
  3. 开发环境:开发者应定期更新 Cython 以保持兼容性
  4. Windows 用户:特别注意环境变量设置和路径配置

通过遵循本指南,您应该能够顺利安装并配置 python-pcl 环境,为点云处理项目做好准备。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

配置工作空间环境 Bash # 初始化工作空间(如果未完成) cd ~/primitive_ws catkin_init_workspace # 生成顶层CMakeLists.txt # 编译工作空间 catkin_make 运行catkin_make输出vae@vae-ASUS-TUF-Gaming-A15-FA507UU-FA507UU:~/primitive_ws$ catkin_make Base path: /home/vae/primitive_ws Source space: /home/vae/primitive_ws/src Build space: /home/vae/primitive_ws/build Devel space: /home/vae/primitive_ws/devel Install space: /home/vae/primitive_ws/install #### #### Running command: "cmake /home/vae/primitive_ws/src -DCATKIN_DEVEL_PREFIX=/home/vae/primitive_ws/devel -DCMAKE_INSTALL_PREFIX=/home/vae/primitive_ws/install -G Unix Makefiles" in "/home/vae/primitive_ws/build" #### -- Using CATKIN_DEVEL_PREFIX: /home/vae/primitive_ws/devel -- Using CMAKE_PREFIX_PATH: /opt/ros/noetic -- This workspace overlays: /opt/ros/noetic -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3") -- Using PYTHON_EXECUTABLE: /usr/bin/python3 -- Using Debian Python package layout -- Using empy: /usr/lib/python3/dist-packages/em.py -- Using CATKIN_ENABLE_TESTING: ON -- Call enable_testing() -- Using CATKIN_TEST_RESULTS_DIR: /home/vae/primitive_ws/build/test_results -- Forcing gtest/gmock from source, though one was otherwise available. -- Found gtest sources under '/usr/src/googletest': gtests will be built -- Found gmock sources under '/usr/src/googletest': gmock will be built -- Found PythonInterp: /usr/bin/python3 (found version "3.8.10") -- Using Python nosetests: /usr/bin/nosetests3 -- catkin 0.8.12 -- BUILD_SHARED_LIBS is on -- BUILD_SHARED_LIBS is on -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing 19 packages in topological order: -- ~~ - quadrotor_msgs -- ~~ - map_generator -- ~~ - poscmd_2_odom -- ~~ - pose_utils -- ~~ - map_server -- ~~ - manual_take_over -- ~~ - odom_visualization -- ~~ - local_sensing_node -- ~~ - mockamap -- ~~ - so3_control -- ~~ - traj_utils -- ~~ - primitive_planner -- ~~ - swarm_bridge -- ~~ - uav_utils -- ~~ - assign_goals -- ~~ - random_goals -- ~~ - so3_quadrotor_simulator -- ~~ - rviz_plugins -- ~~ - selected_points_publisher -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- +++ processing catkin package: 'quadrotor_msgs' -- ==> add_subdirectory(Primitive-Planner/src/Utils/quadrotor_msgs) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- quadrotor_msgs: 14 messages, 0 services -- +++ processing catkin package: 'map_generator' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/map_generator) -- Eigen found (include: /usr/include/eigen3, version: 3.3.7) -- The imported target "vtkParseOGLExt" references the file "/usr/bin/vtkParseOGLExt-7.1" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "vtkRenderingPythonTkWidgets" references the file "/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "vtk" references the file "/usr/bin/vtk" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "pvtk" references the file "/usr/bin/pvtk" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) ** WARNING ** io features related to pcap will be disabled ** WARNING ** io features related to png will be disabled ** WARNING ** io features related to libusb-1.0 will be disabled -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) -- QHULL found (include: /usr/include, lib: optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so) -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- looking for PCL_COMMON -- looking for PCL_KDTREE -- looking for PCL_OCTREE -- looking for PCL_SEARCH -- looking for PCL_SAMPLE_CONSENSUS -- looking for PCL_FILTERS -- looking for PCL_2D -- looking for PCL_GEOMETRY -- looking for PCL_IO -- looking for PCL_FEATURES -- looking for PCL_ML -- looking for PCL_SEGMENTATION -- looking for PCL_VISUALIZATION -- looking for PCL_SURFACE -- looking for PCL_REGISTRATION -- looking for PCL_KEYPOINTS -- looking for PCL_TRACKING -- looking for PCL_RECOGNITION -- looking for PCL_STEREO -- looking for PCL_APPS -- looking for PCL_IN_HAND_SCANNER -- looking for PCL_POINT_CLOUD_EDITOR -- looking for PCL_OUTOFCORE -- looking for PCL_PEOPLE -- Found PCL: pcl_common;pcl_kdtree;pcl_octree;pcl_search;pcl_sample_consensus;pcl_filters;pcl_io;pcl_features;pcl_ml;pcl_segmentation;pcl_visualization;pcl_surface;pcl_registration;pcl_keypoints;pcl_tracking;pcl_recognition;pcl_stereo;pcl_apps;pcl_outofcore;pcl_people;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkCommonExecutionModel;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersCore;vtkInfovisCore;vtkFiltersExtraction;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkFiltersModeling;vtkImagingSources;vtkInteractionStyle;vtkInteractionWidgets;vtkFiltersHybrid;vtkImagingColor;vtkImagingGeneral;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkRenderingAnnotation;vtkRenderingVolume;vtkIOXML;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkIOGeometry;vtkIOLegacy;vtkIOPLY;vtkRenderingLOD;vtkViewsContext2D;vtkViewsCore;vtkRenderingContextOpenGL2;vtkRenderingOpenGL2;FLANN::FLANN -- +++ processing catkin package: 'poscmd_2_odom' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/fake_drone) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'pose_utils' -- ==> add_subdirectory(Primitive-Planner/src/Utils/pose_utils) -- +++ processing catkin package: 'map_server' -- ==> add_subdirectory(map_server) CMake Error at /opt/ros/noetic/share/catkin/cmake/catkin_workspace.cmake:121 (add_subdirectory): The source directory /home/vae/primitive_ws/src/map_server does not contain a CMakeLists.txt file. Call Stack (most recent call first): CMakeLists.txt:69 (catkin_workspace) -- +++ processing catkin package: 'manual_take_over' -- ==> add_subdirectory(Primitive-Planner/src/Utils/manual_take_over) -- +++ processing catkin package: 'odom_visualization' -- ==> add_subdirectory(Primitive-Planner/src/Utils/odom_visualization) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'local_sensing_node' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/local_sensing) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'Eigen' but neither 'Eigen_INCLUDE_DIRS' nor 'Eigen_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) Primitive-Planner/src/uav_simulator/local_sensing/CMakeLists.txt:72 (catkin_package) -- +++ processing catkin package: 'mockamap' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/mockamap) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'so3_control' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/so3_control) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'traj_utils' -- ==> add_subdirectory(Primitive-Planner/src/planner/traj_utils) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- traj_utils: 2 messages, 0 services -- +++ processing catkin package: 'primitive_planner' -- ==> add_subdirectory(Primitive-Planner/src/planner/plan_manage) -- Eigen found (include: /usr/include/eigen3, version: 3.3.7) -- The imported target "vtkParseOGLExt" references the file "/usr/bin/vtkParseOGLExt-7.1" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "vtkRenderingPythonTkWidgets" references the file "/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "vtk" references the file "/usr/bin/vtk" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- The imported target "pvtk" references the file "/usr/bin/pvtk" but this file does not exist. Possible reasons include: * The file was deleted, renamed, or moved to another location. * An install or uninstall procedure did not complete successfully. * The installation package was faulty and contained "/usr/lib/cmake/vtk-7.1/VTKTargets.cmake" but not all the files it references. -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) ** WARNING ** io features related to pcap will be disabled ** WARNING ** io features related to png will be disabled ** WARNING ** io features related to libusb-1.0 will be disabled -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- OpenNI2 found (include: /usr/include/openni2, lib: /usr/lib/libOpenNI2.so) -- QHULL found (include: /usr/include, lib: optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so) -- OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so) -- looking for PCL_COMMON -- looking for PCL_KDTREE -- looking for PCL_OCTREE -- looking for PCL_SEARCH -- looking for PCL_SAMPLE_CONSENSUS -- looking for PCL_FILTERS -- looking for PCL_2D -- looking for PCL_GEOMETRY -- looking for PCL_IO -- looking for PCL_FEATURES -- looking for PCL_ML -- looking for PCL_SEGMENTATION -- looking for PCL_VISUALIZATION -- looking for PCL_SURFACE -- looking for PCL_REGISTRATION -- looking for PCL_KEYPOINTS -- looking for PCL_TRACKING -- looking for PCL_RECOGNITION -- looking for PCL_STEREO -- looking for PCL_APPS -- looking for PCL_IN_HAND_SCANNER -- looking for PCL_POINT_CLOUD_EDITOR -- looking for PCL_OUTOFCORE -- looking for PCL_PEOPLE -- Found PCL: pcl_common;pcl_kdtree;pcl_octree;pcl_search;pcl_sample_consensus;pcl_filters;pcl_io;pcl_features;pcl_ml;pcl_segmentation;pcl_visualization;pcl_surface;pcl_registration;pcl_keypoints;pcl_tracking;pcl_recognition;pcl_stereo;pcl_apps;pcl_outofcore;pcl_people;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkCommonExecutionModel;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersCore;vtkInfovisCore;vtkFiltersExtraction;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkFiltersModeling;vtkImagingSources;vtkInteractionStyle;vtkInteractionWidgets;vtkFiltersHybrid;vtkImagingColor;vtkImagingGeneral;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkRenderingAnnotation;vtkRenderingVolume;vtkIOXML;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkIOGeometry;vtkIOLegacy;vtkIOPLY;vtkRenderingLOD;vtkViewsContext2D;vtkViewsCore;vtkRenderingContextOpenGL2;vtkRenderingOpenGL2;FLANN::FLANN (Required is at least version "1.7") -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- +++ processing catkin package: 'swarm_bridge' -- ==> add_subdirectory(Primitive-Planner/src/planner/swarm_bridge) -- +++ processing catkin package: 'uav_utils' -- ==> add_subdirectory(Primitive-Planner/src/Utils/uav_utils) -- +++ processing catkin package: 'assign_goals' -- ==> add_subdirectory(Primitive-Planner/src/Utils/assign_goals) -- +++ processing catkin package: 'random_goals' -- ==> add_subdirectory(Primitive-Planner/src/Utils/random_goals) -- +++ processing catkin package: 'so3_quadrotor_simulator' -- ==> add_subdirectory(Primitive-Planner/src/uav_simulator/so3_quadrotor_simulator) CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'Eigen3' but neither 'Eigen3_INCLUDE_DIRS' nor 'Eigen3_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) Primitive-Planner/src/uav_simulator/so3_quadrotor_simulator/CMakeLists.txt:29 (catkin_package) CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'system_lib' but neither 'system_lib_INCLUDE_DIRS' nor 'system_lib_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) Primitive-Planner/src/uav_simulator/so3_quadrotor_simulator/CMakeLists.txt:29 (catkin_package) -- +++ processing catkin package: 'rviz_plugins' -- ==> add_subdirectory(Primitive-Planner/src/Utils/rviz_plugins) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy CMake Warning at /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:166 (message): catkin_package() DEPENDS on 'system_lib' but neither 'system_lib_INCLUDE_DIRS' nor 'system_lib_LIBRARIES' is defined. Call Stack (most recent call first): /opt/ros/noetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package) Primitive-Planner/src/Utils/rviz_plugins/CMakeLists.txt:12 (catkin_package) -- Using Qt5 based on the rviz_QT_VERSION: 5.12.8 -- +++ processing catkin package: 'selected_points_publisher' -- ==> add_subdirectory(Primitive-Planner/src/Utils/selected_points_publisher) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- Configuring incomplete, errors occurred! See also "/home/vae/primitive_ws/build/CMakeFiles/CMakeOutput.log". See also "/home/vae/primitive_ws/build/CMakeFiles/CMakeError.log". Invoking "cmake" failed
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋虎辉Mandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值