{ "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { "version": "PTDL_v2", "update_url": null }, "exported_at": "2025-12-15T14:33:50+00:00", "name": "UV Python", "author": "eggs@doong.me", "description": "An Extremely Fast Pterodactyl/Pelican Eggs and Yolks Images\n\nGithub: https://github.com/Dong-Chen-1031/UV-Python-Egg", "features": null, "docker_images": { "Python 3.14": "ghcr.io/dong-chen-1031/yolks:python_uv_3.14", "Python 3.13": "ghcr.io/dong-chen-1031/yolks:python_uv_3.13", "Python 3.12": "ghcr.io/dong-chen-1031/yolks:python_uv_3.12", "Python 3.11": "ghcr.io/dong-chen-1031/yolks:python_uv_3.11", "Python 3.10": "ghcr.io/dong-chen-1031/yolks:python_uv_3.10", "Python 3.9": "ghcr.io/dong-chen-1031/yolks:python_uv_3.9", "Python 3.8": "ghcr.io/dong-chen-1031/yolks:python_uv_3.8" }, "file_denylist": [], "startup": "DEPENDENCY_INSTALL_MODE=\\\"${DEPENDENCY_INSTALL_MODE:-pip}\\\"; cd /home/container || exit 1; if [[ -d .git ]] && [[ \\\"{{AUTO_UPDATE}}\\\" == \\\"1\\\" ]]; then git pull; fi; if [[ \\\"${DEPENDENCY_INSTALL_MODE}\\\" == \\\"uv\\\" ]]; then export UV_PROJECT_ENVIRONMENT=\\\"/home/container/.local/uv\\\"; if [[ -f /home/container/pyproject.toml ]]; then uv sync; exec \\\"${UV_PROJECT_ENVIRONMENT}/bin/python\\\" \\\"/home/container/{{PY_FILE}}\\\"; else exec /usr/local/bin/python \\\"/home/container/{{PY_FILE}}\\\"; fi; else if [[ -n \\\"${PY_PACKAGES//[[:space:]]/}\\\" ]]; then uv pip install -U --prefix .local ${PY_PACKAGES}; fi; if [[ -f \\\"/home/container/${REQUIREMENTS_FILE}\\\" ]]; then uv pip install -U --prefix .local -r \\\"${REQUIREMENTS_FILE}\\\"; fi; export PATH=\\\"/home/container/.local/bin:${PATH}\\\"; PY_SITES=(/home/container/.local/lib/python*/site-packages); export PYTHONPATH=\\\"${PY_SITES[*]}:${PYTHONPATH}\\\"; exec /usr/local/bin/python \\\"/home/container/{{PY_FILE}}\\\"; fi", "config": { "files": "{}", "startup": "{\n \"done\": [\n \"change this text 1\",\n \"change this text 2\"\n ]\n}", "logs": "{}", "stop": "^C" }, "scripts": { "installation": { "script": "#!/bin/bash\\r\\n# Python App Installation Script\\r\\n#\\r\\n# Server Files: /mnt/server\\r\\n\\r\\nmkdir -p /mnt/server\\r\\ncd /mnt/server\\r\\n\\r\\nif [ \\\"${USER_UPLOAD}\\\" == \\\"true\\\" ] || [ \\\"${USER_UPLOAD}\\\" == \\\"1\\\" ]; then\\r\\n echo -e \\\"assuming user knows what they are doing have a good day.\\\"\\r\\n exit 0\\r\\nfi\\r\\n\\r\\n## add git ending if it's not on the address\\r\\nif [[ ${GIT_ADDRESS} != *.git ]]; then\\r\\n GIT_ADDRESS=${GIT_ADDRESS}.git\\r\\nfi\\r\\n\\r\\nif [ -z \\\"${USERNAME}\\\" ] && [ -z \\\"${ACCESS_TOKEN}\\\" ]; then\\r\\n echo -e \\\"using anon api call\\\"\\r\\nelse\\r\\n GIT_ADDRESS=\\\"https://${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d/ -f3-)\\\"\\r\\nfi\\r\\n\\r\\n## pull git python repo\\r\\nif [ \\\"$(ls -A /mnt/server)\\\" ]; then\\r\\n echo -e \\\"/mnt/server directory is not empty.\\\"\\r\\n if [ -d .git ]; then\\r\\n echo -e \\\".git directory exists\\\"\\r\\n if [ -f .git/config ]; then\\r\\n echo -e \\\"loading info from git config\\\"\\r\\n ORIGIN=$(git config --get remote.origin.url)\\r\\n else\\r\\n echo -e \\\"files found with no git config\\\"\\r\\n echo -e \\\"closing out without touching things to not break anything\\\"\\r\\n exit 10\\r\\n fi\\r\\n fi\\r\\n\\r\\n if [ \\\"${ORIGIN}\\\" == \\\"${GIT_ADDRESS}\\\" ]; then\\r\\n echo \\\"pulling latest from github\\\"\\r\\n git pull\\r\\n fi\\r\\nelse\\r\\n echo -e \\\"/mnt/server is empty.\\\\ncloning files into repo\\\"\\r\\n if [ -z ${BRANCH} ]; then\\r\\n echo -e \\\"cloning default branch\\\"\\r\\n git clone ${GIT_ADDRESS} .\\r\\n else\\r\\n echo -e \\\"cloning ${BRANCH}'\\\"\\r\\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\\r\\n fi\\r\\n\\r\\nfi\\r\\n\\r\\nexport HOME=/mnt/server\\r\\n\\r\\nDEPENDENCY_INSTALL_MODE=\\\"${DEPENDENCY_INSTALL_MODE:-pip}\\\"\\r\\n\\r\\necho \\\"Installing Python dependencies (mode: ${DEPENDENCY_INSTALL_MODE})\\\"\\r\\n\\r\\nif [ \\\"${DEPENDENCY_INSTALL_MODE}\\\" = \\\"pip\\\" ]; then\\r\\n if [ -n \\\"${PY_PACKAGES}\\\" ]; then\\r\\n uv pip install -U --prefix .local ${PY_PACKAGES}\\r\\n fi\\r\\n\\r\\n if [ -f \\\"/mnt/server/${REQUIREMENTS_FILE}\\\" ]; then\\r\\n uv pip install -U --prefix .local -r \\\"${REQUIREMENTS_FILE}\\\"\\r\\n fi\\r\\n\\r\\nelif [ \\\"${DEPENDENCY_INSTALL_MODE}\\\" = \\\"uv\\\" ]; then\\r\\n if [ ! -f \\\"/mnt/server/pyproject.toml\\\" ]; then\\r\\n echo \\\"No pyproject.toml found; skipping 'uv sync' (no project dependencies to install).\\\"\\r\\n else\\r\\n # Avoid creating a per-project .venv; store the project environment elsewhere.\\r\\n export UV_PROJECT_ENVIRONMENT=\\\"/mnt/server/.local/uv\\\"\\r\\n uv sync\\r\\n fi\\r\\n\\r\\nelse\\r\\n echo \\\"ERROR: Unknown DEPENDENCY_INSTALL_MODE='${DEPENDENCY_INSTALL_MODE}' (expected: pip or uv)\\\"\\r\\n exit 12\\r\\nfi\\r\\n\\r\\necho -e \\\"install complete\\\"\\r\\nexit 0", "container": "ghcr.io/dong-chen-1031/yolks:python_uv_installer", "entrypoint": "bash" } }, "variables": [ { "name": "Additional Python packages", "description": "Install additional python packages.\r\n\r\nUse spaces to separate", "env_variable": "PY_PACKAGES", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "field_type": "text" }, { "name": "Dependency Install Mode", "description": "pip = uv pip install (uses Requirements file + Additional Python packages), sync = uv sync (uses pyproject.toml; ignores both).", "env_variable": "DEPENDENCY_INSTALL_MODE", "default_value": "pip", "user_viewable": true, "user_editable": true, "rules": "required|string|in:pip,uv", "field_type": "text" }, { "name": "App py file", "description": "The file that starts the App.", "env_variable": "PY_FILE", "default_value": "app.py", "user_viewable": true, "user_editable": true, "rules": "required|string", "field_type": "text" }, { "name": "Auto Update", "description": "Pull the latest files on startup when using a GitHub repo.", "env_variable": "AUTO_UPDATE", "default_value": "0", "user_viewable": true, "user_editable": true, "rules": "required|boolean", "field_type": "text" }, { "name": "Git Access Token", "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps://github.com/settings/tokens\r\nhttps://gitlab.com/-/profile/personal_access_tokens", "env_variable": "ACCESS_TOKEN", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "field_type": "text" }, { "name": "Git Branch", "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", "env_variable": "BRANCH", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "field_type": "text" }, { "name": "Git Repo Address", "description": "Git repo to clone\r\n\r\nI.E. https://github.com/parkervcp/repo_name", "env_variable": "GIT_ADDRESS", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "field_type": "text" }, { "name": "Git Username", "description": "Username to auth with git.", "env_variable": "USERNAME", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "field_type": "text" }, { "name": "Requirements file", "description": "if there are other requirements files to choose from.", "env_variable": "REQUIREMENTS_FILE", "default_value": "requirements.txt", "user_viewable": true, "user_editable": true, "rules": "required|string", "field_type": "text" }, { "name": "User Uploaded Files", "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", "env_variable": "USER_UPLOAD", "default_value": "0", "user_viewable": true, "user_editable": true, "rules": "required|boolean", "field_type": "text" } ] }