Spaces:
Sleeping
Sleeping
# This script guides the user through setting up their env.sh | |
# if env.sh does not exist. Should have no dependencies other | |
# than Python standard library. | |
import shlex | |
import socket | |
import subprocess | |
import textwrap | |
def run(cmd): | |
return subprocess.check_output(shlex.split(cmd)).decode("utf-8") | |
print("1. Setting up Google Cloud access") | |
print("---------------------------------") | |
gcloud_authorized = "gs://research-data-raw" in run("gsutil ls") | |
if not gcloud_authorized: | |
run("gcloud auth login") | |
run("gcloud config set project lyrebird-research") | |
run("gcloud auth configure-docker") | |
print() | |
print("2. Setting up Github access") | |
print("---------------------------") | |
lines = textwrap.wrap( | |
"First, let's get your Github token, so all " | |
"packages can be installed. Create one by going to your " | |
"Github profile -> Developer settings -> Personal access tokens -> " | |
"Generate new token. Copy the token below." | |
) | |
[print(l) for l in lines] | |
GITHUB_TOKEN = input("\nGithub token: ") or "undefined" | |
print() | |
print("3. Setting up Jupyter and Tensorboard") | |
print("-------------------------------------") | |
JUPYTER_TOKEN = input("Password for Jupyter server (default:password): ") or "password" | |
JUPYTER_PORT = input("Jupyter port to run on (default:8888): ") or "8888" | |
TENSORBOARD_PORT = input("Tensorboard port to run on (default:6006): ") or "6006" | |
print() | |
print("4. Setting up paths.") | |
print("--------------------") | |
PATH_TO_RUNS = input("Where runs should go (default:./runs/): ") or "./runs/" | |
TENSORBOARD_PATH = ( | |
input("Bucket/dir for tensorboard logs (default=PATH_TO_RUNS): ") or PATH_TO_RUNS | |
) | |
with open("env/data.sh") as f: | |
data_script = f.read() | |
write_to_data_sh = False | |
if socket.gethostname() not in data_script: | |
print("Looks like the data path for this machine is not setup.") | |
PATH_TO_DATA = input(f"Path to data on {socket.gethostname()}: ") or "~/data" | |
data_command = f""" | |
if [[ $(hostname) == "{socket.gethostname()}" ]]; then | |
export PATH_TO_DATA={PATH_TO_DATA} | |
fi | |
""" | |
write_to_data_sh = True | |
print() | |
print("5. Setting up Papaya") | |
print("-----------------------------------------") | |
PAPAYA_USER_TOKEN = input("Papaya user token: ") or "undefined" | |
env_script = f""" | |
source env/alias.sh | |
source env/data.sh | |
export GITHUB_TOKEN={GITHUB_TOKEN} | |
export PAPAYA_USER_TOKEN={PAPAYA_USER_TOKEN} | |
export HOST_USER_ID=$(id -u) | |
export HOST_USER_GID=$(id -g) | |
export JUPYTER_TOKEN={JUPYTER_TOKEN} | |
export JUPYTER_PORT={JUPYTER_PORT} | |
export TENSORBOARD_PORT={TENSORBOARD_PORT} | |
export PATH_TO_RUNS={PATH_TO_RUNS} | |
export TENSORBOARD_PATH={TENSORBOARD_PATH} | |
""" | |
print() | |
print("6. Potential file contents.") | |
print("---------------------------") | |
print("env/env.sh: \n") | |
print("##################") | |
print(env_script) | |
print("##################") | |
if write_to_data_sh: | |
data_script += data_command | |
print("env/data.sh:") | |
print("##################") | |
print(data_script) | |
print("##################") | |
print() | |
write_to_files = input("Write to file [yn]? ") or "n" | |
if write_to_files == "y": | |
with open("env/env.sh", "w") as f: | |
f.write(env_script.strip()) | |
with open("env/data.sh", "w") as f: | |
f.write(data_script.strip()) | |
print() | |
print("8. Finalize setup.") | |
print("------------------") | |
print("Run the following command to complete setup.") | |
print("source env/env.sh") | |