haosulab / MPlib

a Lightweight Motion Planning Package
https://motion-planning-lib.readthedocs.io/
MIT License
97 stars 16 forks source link

Tried to install MPLib in MacOS but failed to build wheel #89

Open rafaelBauer opened 3 weeks ago

rafaelBauer commented 3 weeks ago

Hello,

I am trying to install MPlib using pip to use it in my python project. But when I try to install it in a MacOS, I am getting the error below:

  Building wheel for mplib (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for mplib (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [287 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-10.9-x86_64-cpython-312
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib
      copying mplib/planner.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib
      copying mplib/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib
      copying mplib/urdf_utils.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/sapien_utils
      copying mplib/sapien_utils/conversion.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/sapien_utils
      copying mplib/sapien_utils/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/sapien_utils
      copying mplib/sapien_utils/srdf_exporter.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/sapien_utils
      copying mplib/sapien_utils/urdf_exporter.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/sapien_utils
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/planning
      copying mplib/planning/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/planning
      copying mplib/planning/ompl.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/planning
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/kinematics
      copying mplib/kinematics/pinocchio.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/kinematics
      copying mplib/kinematics/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/kinematics
      copying mplib/kinematics/kdl.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/kinematics
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/moving_robot.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/detect_collision.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/constrained_planning.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/demo_setup.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/collision_avoidance.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/two_stage_motion.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      copying mplib/examples/demo.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/examples
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/collision_detection
      copying mplib/collision_detection/__init__.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/collision_detection
      copying mplib/collision_detection/fcl.py -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/collision_detection
      running egg_info
      writing mplib.egg-info/PKG-INFO
      writing dependency_links to mplib.egg-info/dependency_links.txt
      writing requirements to mplib.egg-info/requires.txt
      writing top-level names to mplib.egg-info/top_level.txt
      reading manifest file 'mplib.egg-info/SOURCES.txt'
      adding license file 'LICENSE'
      writing manifest file 'mplib.egg-info/SOURCES.txt'
      /private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'mplib.pymp' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'mplib.pymp' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'mplib.pymp' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'mplib.pymp' to be distributed and are
              already explicitly excluding 'mplib.pymp' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      /private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'mplib.pymp.collision_detection' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'mplib.pymp.collision_detection' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'mplib.pymp.collision_detection' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'mplib.pymp.collision_detection' to be distributed and are
              already explicitly excluding 'mplib.pymp.collision_detection' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      /private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'mplib.pymp.kinematics' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'mplib.pymp.kinematics' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'mplib.pymp.kinematics' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'mplib.pymp.kinematics' to be distributed and are
              already explicitly excluding 'mplib.pymp.kinematics' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      /private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'mplib.pymp.planning' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'mplib.pymp.planning' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'mplib.pymp.planning' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'mplib.pymp.planning' to be distributed and are
              already explicitly excluding 'mplib.pymp.planning' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      copying mplib/py.typed -> build/lib.macosx-10.9-x86_64-cpython-312/mplib
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp
      copying mplib/pymp/__init__.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/collision_detection
      copying mplib/pymp/collision_detection/__init__.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/collision_detection
      copying mplib/pymp/collision_detection/fcl.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/collision_detection
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/kinematics
      copying mplib/pymp/kinematics/__init__.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/kinematics
      copying mplib/pymp/kinematics/kdl.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/kinematics
      copying mplib/pymp/kinematics/pinocchio.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/kinematics
      creating build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/planning
      copying mplib/pymp/planning/__init__.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/planning
      copying mplib/pymp/planning/ompl.pyi -> build/lib.macosx-10.9-x86_64-cpython-312/mplib/pymp/planning
      running build_ext
      CMake Warning:
        Ignoring extra path from command line:

         "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-install-xnxme_ni/mplib_61644204c213440fbd06ef1a1ff895a0"

      CMake Error: The source directory "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-install-xnxme_ni/mplib_61644204c213440fbd06ef1a1ff895a0" does not appear to contain CMakeLists.txt.
      Specify --help for usage, or press the help button on the CMake GUI.
      ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-install-xnxme_ni/mplib_61644204c213440fbd06ef1a1ff895a0/build/lib.macosx-10.9-x86_64-cpython-312/mplib/', '-DPYTHON_EXECUTABLE=/usr/local/anaconda3/envs/myenv/bin/python', '-DCMAKE_BUILD_TYPE=Release'] ['-j16']
      Traceback (most recent call last):
        File "/usr/local/anaconda3/envs/myenv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/anaconda3/envs/myenv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/anaconda3/envs/myenv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 410, in build_wheel
          return self._build_with_temp_dir(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 395, in _build_with_temp_dir
          self.run_setup()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 74, in <module>
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 184, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 200, in run_commands
          dist.run_commands()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/normal/lib/python3.12/site-packages/wheel/bdist_wheel.py", line 368, in run
          self.run_command("build")
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build.py", line 132, in run
          self.run_command(cmd_name)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/command/build_ext.py", line 91, in run
          _build_ext.run(self)
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 479, in build_extensions
          self._build_extensions_serial()
        File "/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-build-env-kbhifi26/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 505, in _build_extensions_serial
          self.build_extension(ext)
        File "<string>", line 66, in build_extension
        File "/usr/local/anaconda3/envs/myenv/lib/python3.12/subprocess.py", line 571, in run
          raise CalledProcessError(retcode, process.args,
      subprocess.CalledProcessError: Command '['cmake', '/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-install-xnxme_ni/mplib_61644204c213440fbd06ef1a1ff895a0', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/private/var/folders/3z/3c7znnwn4xx154m06z799rpm0000gn/T/pip-install-xnxme_ni/mplib_61644204c213440fbd06ef1a1ff895a0/build/lib.macosx-10.9-x86_64-cpython-312/mplib/', '-DPYTHON_EXECUTABLE=/usr/local/anaconda3/envs/myenv/bin/python', '-DCMAKE_BUILD_TYPE=Release']' returned non-zero exit status 1.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for mplib
Failed to build mplib
ERROR: Could not build wheels for mplib, which is required to install pyproject.toml-based projects

It seems that it is trying to compile something using CMake. I am familiar with C++ and CMake, but I am quite new to python and wheel, an so on. Any pointers on how could I solve this?

Kind regards, Rafael

Lexseal commented 3 weeks ago

hi, unfortunately, we do not currently compile a wheel for macos. It is theoretically possible though, since each component can be compiled individually on mac. I can try it later today and you're welcome to check out the dev dir for instructions if you want to try yourself : )

rafaelBauer commented 3 weeks ago

Okay. Thanks! I will clone your repo and try it out! Thanks!

LukasSchweizer commented 1 day ago

Did you solved the issue for MacOS? I have the same problem on Windows 10.