Skip to content

Missing Python 3.9 wheels on PyPI for Mujoco v3.4 and v3.5 #3196

@adamheins

Description

@adamheins

Intro

Hi!

I am a postdoc at the University of Toronto and I use MuJoCo for my research on robotics.

My setup

  • Ubuntu 24.04
  • Python 3.9
  • Mujoco 3.4 and 3.5

What's happening? What did you expect?

When using a virtual environment with Python 3.9, running pip install mujoco fails with the output (note I'm actually using uv here) copied below. This happens because Mujoco versions 3.4 and 3.5 claim to support Python 3.9 in their pyproject.toml files, but do not provide Python 3.9 wheels on PyPI. Mujoco 3.3.7 appears to be the most recent version that actually provides Python 3.9 wheels. This is similar to #607, but for different versions.

Ideally, wheels would be provided for the all the versions supporting Python 3.9 - is there a reason not to do so?

  × Failed to build `mujoco==3.5.0`
  ├─▶ The build backend returned an error
  ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1)

      [stdout]
      running bdist_wheel
      running build
      running build_py
      copying mujoco/specs_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/viewer.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/msh2obj_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/minimize.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/memory_leak_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/msh2obj.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/viewer_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/rollout_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/minimize_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/renderer.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/rollout.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/bindings_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/render_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/renderer_test.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/gl_context.py -> build/lib.linux-x86_64-cpython-39/mujoco
      copying mujoco/usd/exporter_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/shapes.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/utils.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/camera.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/lights.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/demo.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/objects.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/usd/exporter.py -> build/lib.linux-x86_64-cpython-39/mujoco/usd
      copying mujoco/glfw/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/glfw
      copying mujoco/egl/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/egl
      copying mujoco/egl/egl_ext.py -> build/lib.linux-x86_64-cpython-39/mujoco/egl
      copying mujoco/introspect/type_parsing_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/enums.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/mjxmacro.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/ast_nodes.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/functions_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/type_parsing.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/enums_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/structs.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/structs_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/ast_nodes_test.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/introspect/functions.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect
      copying mujoco/osmesa/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/osmesa
      copying mujoco/cgl/cgl.py -> build/lib.linux-x86_64-cpython-39/mujoco/cgl
      copying mujoco/cgl/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/cgl
      copying mujoco/sysid/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid
      copying mujoco/introspect/codegen/generate_functions.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect/codegen
      copying mujoco/introspect/codegen/formatter.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect/codegen
      copying mujoco/introspect/codegen/generate_enums.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect/codegen
      copying mujoco/introspect/codegen/generate_structs.py -> build/lib.linux-x86_64-cpython-39/mujoco/introspect/codegen
      copying mujoco/sysid/report/defaults.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report
      copying mujoco/sysid/report/builder.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report
      copying mujoco/sysid/report/utils.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report
      copying mujoco/sysid/_src/timeseries.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/model_modifier.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/optimize.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/plotting.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/trajectory.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/io.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/signal_modifier.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/signal_transform.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/parameter.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/_src/residual.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/_src
      copying mujoco/sysid/tests/test_trajectory.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/test_parameter.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/conftest.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/test_signal.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/test_timeseries.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/test_model_modifier.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/tests/test_integration.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/tests
      copying mujoco/sysid/report/sections/video.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/covariance.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/optimization_trace.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/parameters.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/signals.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/insights.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/parameter_distribution.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/__init__.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/base.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/group.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/sysid/report/sections/row.py -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/sections
      copying mujoco/testdata/msh.xml -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/model.xml -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/abdomen_1_body.msh -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/simple_usd_preview_surface.usda -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/usd_golden.usda -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/MJCF_Root.zip -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/MJCF_NoRoot.zip -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/testdata/model.urdf -> build/lib.linux-x86_64-cpython-39/mujoco/testdata
      copying mujoco/sysid/report/templates/row.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/parameter_confidence.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/group.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/video.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/optimization_trace.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/parameters_table.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/covariance.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/insights.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/layout.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/plot_generic.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/report/templates/signals.html -> build/lib.linux-x86_64-cpython-39/mujoco/sysid/report/templates
      copying mujoco/sysid/py.typed -> build/lib.linux-x86_64-cpython-39/mujoco/sysid
      running build_ext

      [stderr]
      Traceback (most recent call last):
        File "<string>", line 11, in <module>
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/build_meta.py", line 438, in build_wheel
          return _build(['bdist_wheel'])
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/build_meta.py", line 429, in _build
          return self._build_with_temp_dir(
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
          self.run_setup()
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/build_meta.py", line 317, in run_setup
          exec(code, locals())
        File "<string>", line 357, in <module>
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/__init__.py", line 117, in setup
          return distutils.core.setup(**attrs)  # type: ignore[return-value]
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/core.py", line 186, in setup
          return run_commands(dist)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
          dist.run_commands()
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 1000, in run_commands
          self.run_command(cmd)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/dist.py", line 1107, in run_command
          super().run_command(command)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
          cmd_obj.run()
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/command/bdist_wheel.py", line 370, in run
          self.run_command("build")
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 341, in run_command
          self.distribution.run_command(command)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/dist.py", line 1107, in run_command
          super().run_command(command)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
          cmd_obj.run()
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/command/build.py", line 135, in run
          self.run_command(cmd_name)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 341, in run_command
          self.distribution.run_command(command)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/dist.py", line 1107, in run_command
          super().run_command(command)
        File "/home/adam/.cache/uv/builds-v0/.tmp9wdE09/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 1019, in run_command
          cmd_obj.run()
        File "<string>", line 154, in run
        File "<string>", line 168, in _find_mujoco
      RuntimeError: MUJOCO_PATH environment variable is not set

      hint: This usually indicates a problem with the package or the build environment.

Steps for reproduction

  1. Create a Python environment with Python 3.9
  2. Run pip install mujoco==3.4 or pip install mujoco==3.5

Minimal model for reproduction

Code required for reproduction

No response

Confirmations

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions