Switchboard is a Python application that typically downloads and installs some dependencies from the internet via pip
on its first launch. This guide teaches you how to set up Switchboard on devices without internet access.
Prerequisites
- One or more offline machines where you want to install Switchboard.
- An online machine with the same engine version, operating system, and architecture.
Process
Due to a bug with PIP_FIND_LINKS
, you must use a path without spaces on Windows for the package download destination.
- On the online machine, run the following commands to download the Python packages from PyPI and store them locally:
> cd /d "<UE Directory>"
> Engine\Binaries\ThirdParty\Python3\Win64\python.exe -m pip download -r Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt -d <Package Download Destination>
- Copy the resulting
<Package Download Destination>
directory to the offline machine. - On the offline machine, use the following commands to tell
pip
to look in the provided directory during Switchboard's first-time setup:
> set PIP_NO_INDEX=1
> set PIP_FIND_LINKS=<Package Download Destination>
- Run
switchboard.bat
from the same terminal with the above PIP configuration. This should proceed with the first-time setup and indicate that it's processing the.whl
files you downloaded and copied in previous steps.
> "<UE Directory>\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard.bat"
Example Switchboard.bat Output
> D:\P4\...\Main\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard.bat
Using DEFAULT path for Python virtual environment (D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\Python)
Performing Switchboard first-time setup
(INFO) VENV_DIR: D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\Python
(INFO) Creating virtual environment
(INFO) post_setup() - calling install_scripts()
(INFO) post_setup() - invoking pip install
(INFO) pip> Looking in links: d:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\download
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\pyside6_essentials-6.5.3-cp37-abi3-win_amd64.whl (from -r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 1))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\python_osc-1.8.3-py3-none-any.whl (from -r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 2))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\requests-2.24.0-py2.py3-none-any.whl (from -r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 3))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\six-1.15.0-py2.py3-none-any.whl (from -r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 4))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\aioquic-0.9.21-cp37-abi3-win_amd64.whl (from -r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\shiboken6-6.5.3-cp37-abi3-win_amd64.whl (from pyside6-essentials==6.5.3->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 1))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\chardet-3.0.4-py2.py3-none-any.whl (from requests==2.24.0->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 3))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\idna-2.10-py2.py3-none-any.whl (from requests==2.24.0->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 3))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\urllib3-1.25.11-py2.py3-none-any.whl (from requests==2.24.0->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 3))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\certifi-2024.7.4-py3-none-any.whl (from requests==2.24.0->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 3))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\pylsqpack-0.3.18-cp38-abi3-win_amd64.whl (from aioquic==0.9.21->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\pyopenssl-24.2.1-py3-none-any.whl (from aioquic==0.9.21->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\cryptography-43.0.0-cp39-abi3-win_amd64.whl (from pyopenssl>=22->aioquic==0.9.21->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\cffi-1.16.0-cp311-cp311-win_amd64.whl (from cryptography<44,>=41.0.5->pyopenssl>=22->aioquic==0.9.21->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Processing d:\p4\...\main\engine\extras\thirdpartynotue\switchboardthirdparty\download\pycparser-2.22-py3-none-any.whl (from cffi>=1.12->cryptography<44,>=41.0.5->pyopenssl>=22->aioquic==0.9.21->-r D:\P4\...\Main\Engine\Extras\ThirdPartyNotUE\SwitchboardThirdParty\requirements.txt (line 5))
(INFO) pip> Installing collected packages: chardet, urllib3, six, shiboken6, python-osc, pylsqpack, pycparser, idna, certifi, requests, pyside6-essentials, cffi, cryptography, pyopenssl, aioquic
(INFO) pip> Successfully installed aioquic-0.9.21 certifi-2024.7.4 cffi-1.16.0 chardet-3.0.4 cryptography-43.0.0 idna-2.10 pycparser-2.22 pylsqpack-0.3.18 pyopenssl-24.2.1 pyside6-essentials-6.5.3 python-osc-1.8.3 requests-2.24.0 shiboken6-6.5.3 six-1.15.0 urllib3-1.25.11
(INFO) pip install exited with code 0
(INFO) Finished with return code 0