The Python API has a few problems in regards to the setup and configuration.
The PythonPlanBinder has several non-final static fields that store critical information; which python version to use, the path for the distributed cache, etc. that are directly accessed by operators instead of passing them on explicitly or storing them in a configuration.
The naming of methods & arguments in the file setup phase (copy to local tmp location, upload to DFS, register at DC) is less readable than it could be.
The binary path configuration can be stream-lined to use a single key instead of one each for python2 and python 3.