Skip to main content

GH Python Remote is a package to get Rhinoceros3D/Grasshopper and Python to collaborate better: connect an external python instance to Grasshopper, and vice-versa.

Project description

================
gh-python-remote
================

| Connect an external python instance to Grasshopper, and vice-versa.
| This lets you run any Python package directly from Grasshopper, including numpy and scipy!

.. image:: https://raw.githubusercontent.com/Digital-Structures/ghpythonremote/master/ghpythonremote/examples/GH_python_remote_plt.png
:width: 100%
:align: center

************
Installation
************

Requires a Python 2.7 installation, not compatible with Python 3. Python 2.6 might work but is not supported.

Uses `rpyc`_ for the connection backend (automatically installed).

1. Install the software dependencies:
-------------------------------------

:Python 2.7 (2.6 might work too):
gh-python-remote was developed with the `Anaconda`_ distribution in mind (comes with numpy and scipy included),
but anything else works. If you already have Anaconda installed with Python 3, do not reinstall, instead just read
the next paragraph.
:Python `virtual environment`_ (optional):
isolate dependencies for each project by creating a new virtual environment. If you use Anaconda,
``conda env --name rhinoremote --python=2.7`` will set you up with a new virtual environment named ``rhinoremote``.
:`Rhinoceros3D`_:
version 5 is the only one supported by gh-python-remote, no other version works.
:`Grasshopper`_:
version 0.9.0076 is supported by gh-python-remote. Version 0.9.0061 and up might work as well. **Open it at least
once before continuing.**
:`GH Python`_:
version 0.6.0.3 works best, older versions are buggy with gh-python-remote. **Drop it on the Grasshopper canvas at
least once before continuing.**

2. Install gh-python-remote:
--------------------------------

>From the Windows command line (or the special Anaconda or Python command if pip is not in your path by default), run:
*(If you are using a virtual environment, remember to* ``activate`` *it first.)*

.. code-block:: bash

pip install gh-python-remote
python -m ghpythonremote._configure_ironpython_installation

The first line installs gh-python-remote in the current Python interpreter. The second tries to find your Rhinoceros
IronPython installation, and install gh-python-remote there.

If you do not use the standard Rhinoceros IronPython installation
(``%APPDATA%\McNeel\Rhinoceros\5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings``), you can
specify a target directory to use like so: ``python -m ghpythonremote._configure_ironpython_installation "location"``.

This will also install the gh-python-remote UserObject in Grasshopper.

*****
Usage
*****

*All the examples files are copied in the* ``%APPDATA%\Grasshopper\UserObjects\gh-python-remote\examples`` *folder.
You can also download them from the* `github repo`_.

>From Grasshopper to Python
--------------------------

#. Open the example file ``GH_python_remote.ghx`` in Python, or drop the gh-python-remote component on the canvas.
#. Use the ``location`` input to define the location of the Python interpreter you want to connect to. You can use
the path to a folder containing python, the full path to a python executable, or ``conda://`` followed by the name
of an Anaconda virtual environment.
#. Use the ``modules`` input to define the modules you want to access in the GHPython component. Anything that can
follow an ``import`` statement in the remote Python works. If you need to import a submodule inside a package
(like ``import this.that``), the parent package has to be imported first.
#. Change ``run`` to ``True`` to connect.
#. In the GHPython component, the imported modules will be available via the sticky dictionary. For example if you are
trying to use Numpy:

.. code-block:: python

import scriptcontext
np = scriptcontext.sticky['numpy']

#. Done!

Quick-ref:
^^^^^^^^^^

**\*** *marks an input that is only available by editing the gh-python-remote UserObject, or in*
``GH_python_remote.ghx``.

:Arguments:
:\*code (string):
Path to the ``GH_to_python_sticky.py`` code file.
:location (string):
Path to a python executable, or to a folder containing ``python.exe``, or the name of a conda-created virtual
environment prefixed by ``conda://`` (``conda://env_name``). If empty, finds python from your windows
``%PATH%``.
:run (boolean):
Creates the connection, and imports new modules, when turned to True. Kills the connection, and deletes the
references to the imports, when turned to False.
:modules (string list):
List of module names to import in the remote python. They will be added to the ``scriptcontext.sticky``
dictionary, allowing them to be reused from other python components in the same Grasshopper document.
Submodules (for example ``numpy.linalg`` have to be added explicitly to this list to be available later.
:\*log_level (string from ['NOTSET', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']):
Logging level to use for the local IronPython and the remote python instance.
:\*working_dir (string):
Working directory for the remote python instance.

:Returns:
:out (string):
Console output with DEBUG information.
:linked_modules (string list):
list of imported module names.
:import_statements (string):
what to use in the GHPython component to actually use the imported modules.


>From Python to Grasshopper
--------------------------

You can also use gh-python-remote to programmatically control a Rhinoceros instance, and connect to it via Python.
Have a look at ``examples/python_to_GH.py`` for a full working example.

*******
License
*******

Licensed under the `MIT license`_.

.. _rpyc: https://rpyc.readthedocs.io/en/latest/
.. _Anaconda: https://www.anaconda.com/download/
.. _virtual environment: https://docs.python.org/3/tutorial/venv.html
.. _Rhinoceros3D: https://www.rhino3d.com/download
.. _Grasshopper: https://www.rhino3d.com/download/grasshopper/1.0/wip/rc
.. _GH Python: http://www.food4rhino.com/app/ghpython#downloads_list
.. _github repo: https://github.com/Digital-Structures/ghpythonremote/tree/master/ghpythonremote/examples
.. _MIT License: https://github.com/Digital-Structures/ghpythonremote/blob/master/LICENSE.txt

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gh-python-remote-1.0.1.tar.gz (87.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gh_python_remote-1.0.1-py2-none-any.whl (93.6 kB view details)

Uploaded Python 2

File details

Details for the file gh-python-remote-1.0.1.tar.gz.

File metadata

File hashes

Hashes for gh-python-remote-1.0.1.tar.gz
Algorithm Hash digest
SHA256 50ae2604aa96570b83da18a1420f24f96890ee1306ada02035b14c11942d6c07
MD5 31fcda81b7844d78448b1a67e7a939d6
BLAKE2b-256 49cde838d17b2f1a91e415bab8895af84cbfcc29a783971d1c60fc38df029011

See more details on using hashes here.

File details

Details for the file gh_python_remote-1.0.1-py2-none-any.whl.

File metadata

File hashes

Hashes for gh_python_remote-1.0.1-py2-none-any.whl
Algorithm Hash digest
SHA256 f12c08d3b448eb6e1d6158f9d344f1276a14a33a3c3d61d30ee6006e06994b01
MD5 d1c3951aaa6e4d21ca1ebd70c8f8718e
BLAKE2b-256 94dcb60c0683d91f0aa356a171b47c69ad3de2193ebef7e2cc3f60e334203a62

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page