mkpyproject.sh verwendet jetzt auch die templates aus dem Ordner
This commit is contained in:
+33
-460
@@ -11,6 +11,10 @@
|
||||
|
||||
set -e
|
||||
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/setenv.sh"
|
||||
|
||||
TMPL_DIR="$TOOLS_TEMPLATES/mkpyproject"
|
||||
|
||||
# --- Argumente -------------------------------------------------------
|
||||
PROJECT_NAME="${1:-}"
|
||||
TARGET_BASE="${2:-.}"
|
||||
@@ -23,6 +27,7 @@ fi
|
||||
|
||||
PROJECT_UPPER="${PROJECT_NAME^^}"
|
||||
TARGET_DIR="$TARGET_BASE/$PROJECT_NAME"
|
||||
YEAR="$(date +%Y)"
|
||||
|
||||
if [ -d "$TARGET_DIR" ]; then
|
||||
echo "FEHLER: Verzeichnis '$TARGET_DIR' existiert bereits."
|
||||
@@ -35,483 +40,51 @@ echo "Zielverzeichnis: $TARGET_DIR"
|
||||
echo "================================================================"
|
||||
|
||||
# --- Verzeichnisse ---------------------------------------------------
|
||||
mkdir -p "$TARGET_DIR/bin"
|
||||
mkdir -p "$TARGET_DIR/cfg"
|
||||
mkdir -p "$TARGET_DIR/data"
|
||||
mkdir -p "$TARGET_DIR/doc"
|
||||
mkdir -p "$TARGET_DIR/examples"
|
||||
mkdir -p "$TARGET_DIR/lib"
|
||||
mkdir -p "$TARGET_DIR/log"
|
||||
mkdir -p "$TARGET_DIR/results"
|
||||
mkdir -p "$TARGET_DIR/tests"
|
||||
|
||||
for d in bin cfg data doc examples lib log results tests; do
|
||||
mkdir -p "$TARGET_DIR/$d"
|
||||
done
|
||||
echo "[OK] Verzeichnisse angelegt"
|
||||
|
||||
# --- bin/setenv.bat --------------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/setenv.bat" << ENDOFFILE
|
||||
@echo off
|
||||
|
||||
REM ================================================================
|
||||
REM ${PROJECT_UPPER} - Umgebungsvariablen Setup
|
||||
REM ================================================================
|
||||
|
||||
echo Setting up environment variables for ${PROJECT_UPPER} ...
|
||||
|
||||
REM Basis-Projektpfad (aktueller Ordner)
|
||||
set "PROJECT=%~dp0.."
|
||||
if "%PROJECT:~-6%"=="bin\.." set "PROJECT=%PROJECT:~0,-6%"
|
||||
if "%PROJECT:~-1%"=="\" set "PROJECT=%PROJECT:~0,-1%"
|
||||
|
||||
REM Pfade für verschiedene Komponenten
|
||||
set "PV_BIN=%PROJECT%\bin"
|
||||
set "PV_LIB=%PROJECT%\lib"
|
||||
set "PV_DATA=%PROJECT%\data"
|
||||
set "PV_CFG=%PROJECT%\cfg"
|
||||
set "PV_LOG=%PROJECT%\log"
|
||||
set "PV_TESTS=%PROJECT%\tests"
|
||||
set "PV_RESULTS=%PROJECT%\results"
|
||||
set "PV_EXAMPLES=%PROJECT%\examples"
|
||||
|
||||
REM Python-Pfad erweitern (nur wenn noch nicht vorhanden)
|
||||
echo %PYTHONPATH% | find /i "%PV_LIB%" >nul
|
||||
if errorlevel 1 (
|
||||
set "PYTHONPATH=%PV_LIB%;%PYTHONPATH%"
|
||||
)
|
||||
|
||||
REM Ordner erstellen falls sie nicht existieren
|
||||
if not exist "%PV_BIN%" mkdir "%PV_BIN%"
|
||||
if not exist "%PV_CFG%" mkdir "%PV_CFG%"
|
||||
if not exist "%PV_LIB%" mkdir "%PV_LIB%"
|
||||
if not exist "%PV_DATA%" mkdir "%PV_DATA%"
|
||||
if not exist "%PV_LOG%" mkdir "%PV_LOG%"
|
||||
if not exist "%PV_RESULTS%" mkdir "%PV_RESULTS%"
|
||||
if not exist "%PV_EXAMPLES%" mkdir "%PV_EXAMPLES%"
|
||||
|
||||
REM Umgebungsvariablen anzeigen
|
||||
echo.
|
||||
echo ================================================================
|
||||
echo ${PROJECT_UPPER} ENVIRONMENT SETUP COMPLETE
|
||||
echo ================================================================
|
||||
echo PROJECT = %PROJECT%
|
||||
echo PV_BIN = %PV_BIN%
|
||||
echo PV_CFG = %PV_CFG%
|
||||
echo PV_LIB = %PV_LIB%
|
||||
echo PV_DATA = %PV_DATA%
|
||||
echo PV_RESULTS = %PV_RESULTS%
|
||||
echo PV_LOG = %PV_LOG%
|
||||
echo PV_EXAMPLES = %PV_EXAMPLES%
|
||||
echo PYTHONPATH = %PYTHONPATH%
|
||||
echo ================================================================
|
||||
echo.
|
||||
|
||||
REM Optionally keep window open
|
||||
if "%1"=="--keep-open" pause
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/setenv.sh ---------------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/setenv.sh" << ENDOFFILE
|
||||
#!/usr/bin/env bash
|
||||
# ================================================================
|
||||
# ${PROJECT_UPPER} - Umgebungsvariablen Setup
|
||||
# ================================================================
|
||||
# Dieses Skript muss gesourct werden: source bin/setenv.sh
|
||||
# ================================================================
|
||||
|
||||
echo "Setting up environment variables for ${PROJECT_UPPER} ..."
|
||||
|
||||
# Basis-Projektpfad (übergeordnetes Verzeichnis von bin/)
|
||||
SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
|
||||
export PROJECT="\$(cd "\$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
# Pfade für verschiedene Komponenten
|
||||
export PV_BIN="\$PROJECT/bin"
|
||||
export PV_LIB="\$PROJECT/lib"
|
||||
export PV_DATA="\$PROJECT/data"
|
||||
export PV_CFG="\$PROJECT/cfg"
|
||||
export PV_LOG="\$PROJECT/log"
|
||||
export PV_TESTS="\$PROJECT/tests"
|
||||
export PV_RESULTS="\$PROJECT/results"
|
||||
export PV_EXAMPLES="\$PROJECT/examples"
|
||||
|
||||
# Python-Pfad erweitern (nur wenn noch nicht vorhanden)
|
||||
if [[ ":\$PYTHONPATH:" != *":\$PV_LIB:"* ]]; then
|
||||
export PYTHONPATH="\$PV_LIB:\$PYTHONPATH"
|
||||
fi
|
||||
|
||||
# Ordner erstellen falls sie nicht existieren
|
||||
mkdir -p "\$PV_BIN" "\$PV_CFG" "\$PV_LIB" "\$PV_DATA" "\$PV_LOG" "\$PV_RESULTS" "\$PV_EXAMPLES"
|
||||
|
||||
echo ""
|
||||
echo "================================================================"
|
||||
echo "${PROJECT_UPPER} ENVIRONMENT SETUP COMPLETE"
|
||||
echo "================================================================"
|
||||
echo "PROJECT = \$PROJECT"
|
||||
echo "PV_BIN = \$PV_BIN"
|
||||
echo "PV_CFG = \$PV_CFG"
|
||||
echo "PV_LIB = \$PV_LIB"
|
||||
echo "PV_DATA = \$PV_DATA"
|
||||
echo "PV_RESULTS = \$PV_RESULTS"
|
||||
echo "PV_LOG = \$PV_LOG"
|
||||
echo "PV_EXAMPLES = \$PV_EXAMPLES"
|
||||
echo "PYTHONPATH = \$PYTHONPATH"
|
||||
echo "================================================================"
|
||||
echo ""
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/install_py.bat ----------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/install_py.bat" << ENDOFFILE
|
||||
@echo off
|
||||
REM ================================================================
|
||||
REM ${PROJECT_UPPER} - Python Virtual Environment einrichten
|
||||
REM ================================================================
|
||||
|
||||
call "%~dp0setenv.bat"
|
||||
|
||||
if not exist "%PROJECT%\.venv" (
|
||||
echo Initialisiere Python virtual environment...
|
||||
py -m venv "%PROJECT%\.venv" --upgrade-deps
|
||||
echo Erfolgreich.
|
||||
|
||||
call "%PROJECT%\.venv\Scripts\activate.bat"
|
||||
echo Installiere erforderliche Python Packages...
|
||||
pip install -r "%PROJECT%\requirements.txt" -q
|
||||
echo Erfolgreich.
|
||||
deactivate
|
||||
) else (
|
||||
echo Erforderliche Python Packages bereits installiert!
|
||||
)
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/install_py.sh -----------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/install_py.sh" << ENDOFFILE
|
||||
#!/usr/bin/env bash
|
||||
# ================================================================
|
||||
# ${PROJECT_UPPER} - Python Virtual Environment einrichten
|
||||
# ================================================================
|
||||
|
||||
SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "\$SCRIPT_DIR/setenv.sh"
|
||||
|
||||
if [ ! -d "\$PROJECT/.venv" ]; then
|
||||
echo "Initialisiere Python virtual environment..."
|
||||
python3 -m venv "\$PROJECT/.venv" --upgrade-deps
|
||||
echo "Erfolgreich."
|
||||
|
||||
source "\$PROJECT/.venv/bin/activate"
|
||||
echo "Installiere erforderliche Python Packages..."
|
||||
pip install -r "\$PROJECT/requirements.txt" -q
|
||||
echo "Erfolgreich."
|
||||
deactivate
|
||||
else
|
||||
echo "Erforderliche Python Packages bereits installiert!"
|
||||
fi
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/activate_venv.bat -------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/activate_venv.bat" << ENDOFFILE
|
||||
@echo off
|
||||
REM ================================================================
|
||||
REM ${PROJECT_UPPER} - Python Virtual Environment aktivieren
|
||||
REM ================================================================
|
||||
|
||||
call "%~dp0setenv.bat"
|
||||
|
||||
if not exist "%PROJECT%\.venv" (
|
||||
echo FEHLER: Virtual environment nicht gefunden.
|
||||
echo Bitte zuerst bin\install_py.bat ausfuehren.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
call "%PROJECT%\.venv\Scripts\activate.bat"
|
||||
echo Virtuelle Umgebung aktiviert.
|
||||
echo Python-Version:
|
||||
python --version
|
||||
echo.
|
||||
echo Installierte Pakete:
|
||||
pip list
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/activate_venv.sh --------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/activate_venv.sh" << ENDOFFILE
|
||||
#!/usr/bin/env bash
|
||||
# ================================================================
|
||||
# ${PROJECT_UPPER} - Python Virtual Environment aktivieren
|
||||
# ================================================================
|
||||
# Dieses Skript muss gesourct werden: source bin/activate_venv.sh
|
||||
# ================================================================
|
||||
|
||||
SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "\$SCRIPT_DIR/setenv.sh"
|
||||
|
||||
if [ ! -d "\$PROJECT/.venv" ]; then
|
||||
echo "FEHLER: Virtual environment nicht gefunden."
|
||||
echo "Bitte zuerst bin/install_py.sh ausfuehren."
|
||||
return 1
|
||||
fi
|
||||
|
||||
source "\$PROJECT/.venv/bin/activate"
|
||||
echo "Virtuelle Umgebung aktiviert."
|
||||
echo "Python-Version:"
|
||||
python --version
|
||||
echo ""
|
||||
echo "Installierte Pakete:"
|
||||
pip list
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/get_cmd.bat -------------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/get_cmd.bat" << ENDOFFILE
|
||||
@echo off
|
||||
REM ================================================================
|
||||
REM ${PROJECT_UPPER} - Shell mit gesetzten Umgebungsvariablen öffnen
|
||||
REM ================================================================
|
||||
|
||||
call "%~dp0setenv.bat"
|
||||
start cmd /k "echo ${PROJECT_UPPER} Umgebung aktiv. && echo PROJECT=%PROJECT%"
|
||||
ENDOFFILE
|
||||
|
||||
# --- bin/get_cmd.sh --------------------------------------------------
|
||||
cat > "$TARGET_DIR/bin/get_cmd.sh" << ENDOFFILE
|
||||
#!/usr/bin/env bash
|
||||
# ================================================================
|
||||
# ${PROJECT_UPPER} - Shell mit gesetzten Umgebungsvariablen öffnen
|
||||
# ================================================================
|
||||
# Verwendung: source bin/get_cmd.sh
|
||||
# ================================================================
|
||||
|
||||
SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "\$SCRIPT_DIR/setenv.sh"
|
||||
|
||||
exec "\$SHELL"
|
||||
ENDOFFILE
|
||||
# --- Hilfsfunktion: Template kopieren mit Ersetzung ------------------
|
||||
copy_tmpl() {
|
||||
local rel="$1"
|
||||
sed -e "s/__PROJECT_NAME__/$PROJECT_NAME/g" \
|
||||
-e "s/__PROJECT_UPPER__/$PROJECT_UPPER/g" \
|
||||
-e "s/__YEAR__/$YEAR/g" \
|
||||
"$TMPL_DIR/$rel" > "$TARGET_DIR/$rel"
|
||||
}
|
||||
|
||||
# --- bin/ Skripte ----------------------------------------------------
|
||||
copy_tmpl "bin/setenv.bat"
|
||||
copy_tmpl "bin/setenv.sh"
|
||||
copy_tmpl "bin/install_py.bat"
|
||||
copy_tmpl "bin/install_py.sh"
|
||||
copy_tmpl "bin/activate_venv.bat"
|
||||
copy_tmpl "bin/activate_venv.sh"
|
||||
copy_tmpl "bin/get_cmd.bat"
|
||||
copy_tmpl "bin/get_cmd.sh"
|
||||
chmod +x "$TARGET_DIR/bin/"*.sh
|
||||
echo "[OK] bin/ Skripte erstellt"
|
||||
|
||||
# --- .gitignore ------------------------------------------------------
|
||||
cat > "$TARGET_DIR/.gitignore" << 'ENDOFFILE'
|
||||
# ---> Python
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
*.manifest
|
||||
*.spec
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
*.mo
|
||||
*.pot
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
.spyderproject
|
||||
.spyproject
|
||||
.ropeproject
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
.pyre/
|
||||
.pytype/
|
||||
cython_debug/
|
||||
.pdm.toml
|
||||
__pypackages__/
|
||||
/site-packages
|
||||
/site
|
||||
.ipynb_checkpoints
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# Benutzerdefiniert
|
||||
/data
|
||||
/work
|
||||
/log
|
||||
/results
|
||||
ENDOFFILE
|
||||
|
||||
# --- Weitere Dateien -------------------------------------------------
|
||||
copy_tmpl ".gitignore"
|
||||
echo "[OK] .gitignore erstellt"
|
||||
|
||||
# --- LICENSE ---------------------------------------------------------
|
||||
YEAR=$(date +%Y)
|
||||
cat > "$TARGET_DIR/LICENSE" << ENDOFFILE
|
||||
MIT License
|
||||
|
||||
Copyright (c) $YEAR Michael Stangl, on GitHub mistamichael
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
ENDOFFILE
|
||||
|
||||
copy_tmpl "LICENSE"
|
||||
echo "[OK] LICENSE erstellt"
|
||||
|
||||
# --- README.md -------------------------------------------------------
|
||||
cat > "$TARGET_DIR/README.md" << ENDOFFILE
|
||||
# ${PROJECT_NAME}
|
||||
|
||||
> Kurze Projektbeschreibung hier eintragen.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
\`\`\`
|
||||
${PROJECT_NAME}/
|
||||
├── bin/ # Skripte zur Umgebungsverwaltung
|
||||
│ ├── setenv.bat/.sh # Umgebungsvariablen setzen
|
||||
│ ├── install_py.bat/.sh # venv erstellen + pip install
|
||||
│ ├── activate_venv.bat/.sh # venv aktivieren
|
||||
│ └── get_cmd.bat/.sh # Shell mit Umgebung öffnen
|
||||
├── cfg/ # Konfigurationsdateien (INI/JSON)
|
||||
├── data/ # Eingabedaten (nicht im Git)
|
||||
├── doc/ # Dokumentation
|
||||
├── examples/ # Beispieldateien
|
||||
├── lib/ # Python-Quellcode / Bibliothek
|
||||
├── log/ # Log-Dateien (nicht im Git)
|
||||
├── results/ # Ergebnisse / Ausgaben (nicht im Git)
|
||||
├── tests/ # Unit Tests
|
||||
├── .gitignore
|
||||
├── LICENSE
|
||||
├── README.md
|
||||
└── requirements.txt
|
||||
\`\`\`
|
||||
|
||||
## Umgebungsvariablen
|
||||
|
||||
| Variable | Beschreibung |
|
||||
|----------------|---------------------------|
|
||||
| \`PROJECT\` | Wurzelverzeichnis |
|
||||
| \`PV_BIN\` | Skriptverzeichnis |
|
||||
| \`PV_LIB\` | Python-Quellcode |
|
||||
| \`PV_CFG\` | Konfigurationsdateien |
|
||||
| \`PV_DATA\` | Eingabedaten |
|
||||
| \`PV_LOG\` | Log-Dateien |
|
||||
| \`PV_RESULTS\` | Ergebnisse |
|
||||
| \`PV_EXAMPLES\` | Beispieldateien |
|
||||
| \`PYTHONPATH\` | Erweitert um \`PV_LIB\` |
|
||||
|
||||
## Installation
|
||||
|
||||
### Voraussetzungen
|
||||
|
||||
- Python 3.10 oder höher
|
||||
|
||||
### Setup (Windows)
|
||||
|
||||
\`\`\`bat
|
||||
bin\install_py.bat
|
||||
\`\`\`
|
||||
|
||||
### Setup (Linux / macOS)
|
||||
|
||||
\`\`\`bash
|
||||
bash bin/install_py.sh
|
||||
\`\`\`
|
||||
|
||||
## Nutzung
|
||||
|
||||
### Umgebung setzen
|
||||
|
||||
\`\`\`bat
|
||||
bin\setenv.bat # Windows
|
||||
\`\`\`
|
||||
\`\`\`bash
|
||||
source bin/setenv.sh # Linux / macOS
|
||||
\`\`\`
|
||||
|
||||
### Shell mit gesetzten Variablen öffnen
|
||||
|
||||
\`\`\`bat
|
||||
bin\get_cmd.bat # Windows
|
||||
\`\`\`
|
||||
\`\`\`bash
|
||||
source bin/get_cmd.sh # Linux / macOS
|
||||
\`\`\`
|
||||
|
||||
### venv aktivieren
|
||||
|
||||
\`\`\`bat
|
||||
bin\activate_venv.bat # Windows
|
||||
\`\`\`
|
||||
\`\`\`bash
|
||||
source bin/activate_venv.sh # Linux / macOS
|
||||
\`\`\`
|
||||
|
||||
## Lizenz
|
||||
|
||||
MIT License — siehe [LICENSE](LICENSE)
|
||||
|
||||
## Autor
|
||||
|
||||
Michael Stangl (GitHub: mistamichael)
|
||||
ENDOFFILE
|
||||
|
||||
copy_tmpl "README.md"
|
||||
echo "[OK] README.md erstellt"
|
||||
|
||||
# --- requirements.txt ------------------------------------------------
|
||||
cat > "$TARGET_DIR/requirements.txt" << 'ENDOFFILE'
|
||||
# Python-Abhängigkeiten
|
||||
# Installieren mit: pip install -r requirements.txt
|
||||
|
||||
# Beispiel-Abhängigkeiten – anpassen nach Bedarf:
|
||||
# pydantic >= 2.0.0
|
||||
# pytest >= 9.0.0
|
||||
ENDOFFILE
|
||||
|
||||
copy_tmpl "requirements.txt"
|
||||
echo "[OK] requirements.txt erstellt"
|
||||
|
||||
# --- Berechtigungen für .sh-Dateien ----------------------------------
|
||||
chmod +x "$TARGET_DIR/bin/"*.sh
|
||||
|
||||
echo ""
|
||||
echo "================================================================"
|
||||
echo "FERTIG! Projekt '${PROJECT_NAME}' wurde erstellt."
|
||||
echo "FERTIG! Projekt '$PROJECT_NAME' wurde erstellt."
|
||||
echo "================================================================"
|
||||
echo ""
|
||||
echo "Nächste Schritte:"
|
||||
echo "Naechste Schritte:"
|
||||
echo " Windows: bin\install_py.bat"
|
||||
echo " Linux: bash bin/install_py.sh"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user