Python scripting is available from OpenSim 3.2, onward. Starting with 4.0, OpenSim is distributed as 64-bit only, so you must use 64-bit Python.

Introduction to Python

Python is a widely used general purpose programming language. Python is free and open source, with a large user community that encourages sharing and user contributions. The Python language is very flexible, supporting object-oriented and procedural styles of computing. The Python design philosophy also emphasizes code readability which makes sharing and using code easier than with some other languages. 

Those from scientific and engineering backgrounds who are new to Python should check out the following resources to help get started with the language:

Note on Python 2.7.x vs Python 3

  • The Python package that comes with the OpenSim GUI distribution will only work with Python 2.7.x. For Python 3, you must build the OpenSim API (opensim-core) from scratch and set the CMake variable OPENSIM_PYTHON_VERSION to 3.

Setting up your Python scripting environment


 Click here to expand...
There are a couple options for setting up Python on your Windows machine. You will need the main Python package, as well as NumPy and SciPy. Alternatively, there are applications such as Anaconda that bundle all the required packages. You can also just set-up Python and the associated packages manually. We have tested both methods, but currently advise you to use Anaconda. Make sure that you get 64-bit Python.

Package NameDownloadsCosts/licensing
Continuum Anaconda Anaconda ApplicationBasic package is free to download and use, contains Python 2.7 and other dependent packages. Cleanly installs into a single directory on your machine.
Python 2.7



Free to use and download.

Installing Anaconda and the "opensim" Python package

 Click here to expand...

Download and Install Anaconda

Visit the Anaconda website and download Anaconda for Python 2.7 (64-bit). You can try using the following direct download link, though it may be outdated: Anaconda2-5.2.0-Windows-x86_64.exe

Insert OpenSim into the System Path

Edit your Path environment variable to include <OPENSIM_INSTALL_DIRECTORY>\bin is in system variables Path, where OPENSIM_INSTALL_DIRECTORY is the directory where you installed the current version of OpenSim (e.g. C:\OpenSim 4.0). Delete any other OpenSim Path entries. For instructions, see

Run the Setup File from Command Line

Open an Anaconda Command Prompt (type anaconda into the Windows Start menu). Navigate to the OpenSim Installation folder and find the subfolder sdk which contains the script

cd C:\OpenSim 4.0\sdk\Python

Run the python script by typing:

python install

This will copy the required files and folders into the Anaconda directory.

Test Installation

Start the Spyder integrated development environment, installed by Anaconda, by typing spyder into the Windows Start menu. Run the following in the interpreter that appears within Spyder:

import opensim

If there is no error, then the installation worked.

Having trouble?

If you are having trouble with getting python wrapping to work on Windows, the issue is almost certainly one of the following:
  1. You are trying to use 32-bit Python with 64-bit OpenSim libraries. If you are using 64-bit OpenSim libraries, make sure to use 64-bit python.
  2. OpenSim's DLLs are not on your PATH. In a command window, you could achieve this with a command like "set PATH=C:\OpenSim 4.0\bin;%PATH%"


 Click here to expand...

macOS comes with Python 2.7, but you may also want to obtain Python through Homebrew or the Anaconda Python distribution. Note that the Python package that comes with the OpenSim GUI distribution was built to use the Python that comes with macOS, and it will not work with Homebrew's Python or with Anaconda Python; in the latter cases, you must compile OpenSim from the source code.

Navigate to the location of the opensim python package within the OpenSim installation. If you are using OpenSim's GUI distribution, this location is likely /Applications/OpenSim 4.x/sdk/Python. If you built OpenSim from source, this location is likely <OPENSIM_INSTALL_DIR>/lib/python2.7/site-packages. Perform the following (modifying the path below if necessary):

$ cd /Applications/OpenSim 4.0/sdk/Python
$ sudo python install

The OpenSim libraries must be on your DYLD_LIBRARY_PATH:


You can place the above `export` commands in your `~/.bash_profile` file so that they are set whenever you open up a new terminal.

You should be ready to use the Python wrapping now. Try the following from any directory:

$ python
>>> import opensim
>>> m = opensim.Model()


 Click here to expand...

We assume that you will use Python through the terminal. Open a new terminal window.

$ sudo apt-get install python-setuptools

Navigate to the sdk/python folder in your OpenSim installation. Assuming that OpenSim is installed into directory OPENSIM_INSTALL_DIR, perform the following:

$ cd <OPENSIM_INSTALL_DIR>/lib/python2.7/site-packages
$ sudo python install

The OpenSim libraries must be on your LD_LIBRARY_PATH:


You can place the above `export` commands in your `~/.bashrc` file so that they are set whenever you open up a new terminal.

You should be ready to use the Python wrapping now. Try the following from any directory:

$ python
>>> import opensim
>>> m = opensim.Model()

Available Example Scripts

Scripts can are located in the OpenSim distribution in the sdk/Scripts/Python folder. 

Script Name

build_simple_arm_model.pyThis script generates a simple arm model, runs a simulation, and visualizes the results.
wiring_inputs_and_outputs_with_TableReporter.pyThis script shows how to write model outputs (the position of a body) to a data file.

Pythonic extensions of the OpenSim API

We have add some pythonic aspects to our Python interface. All examples assume that you have already imported the opensim package ("import opensim").

Initializing a Vector from a Python list
v = opensim.Vector([6, 7, 8, 9])
rv = opensim.RowVector([1, 2, 5])
Accessing elements of VecX and Vector using brackets
v = opensim.Vec3(1, 2, 3)
v[0] = 1.5 + v[1]
w = opensim.Vector(5, 1.5)
w[0] = 3 * w[1]
Printing the contents of a VecX or Vector
>>> v = opensim.Vec3(1, 2, 3)
>>> print v
Getting the length of a VecX or Vector

You can use the built-in python function len() on VecX (e.g., Vec3) and Vector:

w = opensim.Vector(5)
if len(w) < 5:
    raise Exception()
Iterate over elements of any Set

There are two iterators: one that treats the Set like a python list, and another that treats the Set like a python dict:

model = opensim.Model("my_model.osim")
for force in model.getForceSet():
for name, muscle in model.getMuscles():
    print(name, muscle.get_max_isometric_force())

Iterate over all bodies in a model (even bodies not in the model's BodySet)

model = opensim.Model("my_model.osim")
for body in model.getBodyList():