Altair® Panopticon


Python Integration

Follow the steps below to enable Python connectivity.


1.     Download and install Python.

For ease of deployment we suggest the Anaconda Python distribution

2.     Add Python installation folder to your Path environment variable.



On Windows, when using the Anaconda distribution of Python, you should add the following folder paths to your Windows System Environment variable Path:

  • \Anaconda3\

The folder where Python is installed.

  • \Anaconda3\Library\bin

The folder containing DLLs related to the installed Python packages.




3.     Download the latest version of Pyro4.

For Windows download the Wheel: Pyro4-4.79-py2.py3-none-any.whl

4.     Open the Anaconda Prompt. Navigate to the location of Pyro4-4.79-py2.py3-none-any.whl  and run:

Pip install Pyro4-4.79-py2.py3-none-any.whl

Pyro is now installed into the Python site packages.

5.     Open Panopticon Designer (Desktop) then select Tools > Options.

The Altair Panopticon Options dialog displays.

6.      Check the Enable Python Connectivity on Start Up box then click OK.

7.     Restart Panopticon Designer (Desktop).

This saves the change and enables Python connectivity whenever Panopticon Designer (Desktop) is opened.


To uninstall prior versions of Pyro:

pip uninstall Pyro4



The default password to secure connectivity is set to: password

To change this:

Edit start_Python_connectivity.bat, editing the line:

start python -m Pyro4.naming -k "password"  

Edit, editing the line:

ns = Pyro4.locateNS(host=host, hmac_key="password")

Pyro is set to listen on a specific host/IP, which by default is localhost.


This can be modified through editing the batch file that instantiates Pyro.

@echo on

start python -m Pyro4.naming -n "[Required HostName]" -k "password"

ping localhost

cd "%~dp0"

python "[Required HostName]"



To enable the Pickle serialization, modify the  file located in ..\Anaconda3\Lib\site-packages\Pyro4 to specify the serialization to be used.

For example, if Pickle is selected, self.SERIALIZER  value should be changed to pickle and self.SERIALIZERS_ACCEPTED  value should be changed to include pickle:

def reset(self, useenvironment=True): """ Set default config items. If useenvironment is False, won't read environment variables settings (useful if you can't trust your env). """ self.HOST = "localhost" # don't expose us to the outside world by default self.NS_HOST = self.HOST self.NS_PORT = 9090 # tcp self.NS_BCPORT = 9091 # udp self.NS_BCHOST = None self.NATHOST = None self.NATPORT = 0 self.COMPRESSION = False self.SERVERTYPE = "thread" self.COMMTIMEOUT = 0.0 self.POLLTIMEOUT = 2.0 # seconds self.SOCK_REUSE = True # so_reuseaddr on server sockets? self.SOCK_NODELAY = False # tcp_nodelay on socket? self.THREADING2 = False # use threading2 if available? self.ONEWAY_THREADED = True # oneway calls run in their own thread self.DETAILED_TRACEBACK = False self.THREADPOOL_SIZE = 16 self.AUTOPROXY = True self.MAX_MESSAGE_SIZE = 0 # 0 = unlimited self.BROADCAST_ADDRS = "<broadcast>," # comma separated list of broadcast addresses self.FLAME_ENABLED = False self.PREFER_IP_VERSION = 4 # 4, 6 or 0 (let OS choose according to RFC 3484) self.SERIALIZER = "pickle" self.SERIALIZERS_ACCEPTED = "pickle,marshal,json" # these are the 'safe' serializers self.LOGWIRE = False # log wire-level messages self.PICKLE_PROTOCOL_VERSION = pickle.HIGHEST_PROTOCOL self.METADATA = True # get metadata from server on proxy connect self.REQUIRE_EXPOSE = False # require @expose to make members remotely accessible (if False, everything is accessible) self.USE_MSG_WAITALL = hasattr(socket, "MSG_WAITALL") and platform.system() != "Windows" # not reliable on windows even though it is defined self.JSON_MODULE = "json" self.MAX_RETRIES = 0