{"id":8894,"date":"2026-09-12T09:15:21","date_gmt":"2026-09-12T07:15:21","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8894"},"modified":"2026-09-12T09:15:21","modified_gmt":"2026-09-12T07:15:21","slug":"zentrale-python-installation-mit-uv","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/zentrale-python-installation-mit-uv\/","title":{"rendered":"Zentrale Python-Installation mit uv"},"content":{"rendered":"<p>Mit <strong>uv<\/strong> lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden.<\/p>\n<p>Dieses Setup verfolgt eine klare Trennung:<\/p>\n<ul>\n<li>Python-Versionen werden zentral unter <code>\/opt\/python<\/code> installiert.<\/li>\n<li><code>uv<\/code> wird systemweit unter <code>\/usr\/local\/bin\/uv<\/code> bereitgestellt.<\/li>\n<li>Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt.<\/li>\n<li>Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen Umgebung installiert.<\/li>\n<\/ul>\n<h2>Zielstruktur<\/h2>\n<pre class=\"lang:default decode:true \">\/usr\/local\/bin\/uv\r\n\r\n\/opt\/python\/\r\n\u251c\u2500\u2500 3.12.x\/\r\n\u251c\u2500\u2500 3.13.x\/\r\n\u2514\u2500\u2500 3.14.x\/\r\n\r\n\/home\/User\/\r\n\u2514\u2500\u2500 projekt\/\r\n    \u2514\u2500\u2500 .venv\/<\/pre>\n<h2>1. Verzeichnis f\u00fcr zentrale Python-Versionen erstellen<\/h2>\n<p>Die folgenden Befehle werden als <code>root<\/code> ausgef\u00fchrt:<\/p>\n<pre class=\"lang:default decode:true\">sudo mkdir -p \/opt\/python \r\nsudo chmod 755 \/opt\/python<\/pre>\n<h2>2. uv systemweit installieren<\/h2>\n<p>Die Installation von <code>uv<\/code> erfolgt ebenfalls als <code>root<\/code>:<\/p>\n<pre class=\"\">sudo curl -LsSf https:\/\/astral.sh\/uv\/install.sh | sudo env UV_INSTALL_DIR=\/usr\/local\/bin sh<\/pre>\n<p>Anschlie\u00dfend kann die Installation \u00fcberpr\u00fcft werden:<\/p>\n<pre class=\"lang:default decode:true\">uv --version<\/pre>\n<p><code>uv<\/code> befindet sich anschlie\u00dfend unter:<\/p>\n<pre class=\"lang:default decode:true\">\/usr\/local\/bin\/uv<\/pre>\n<h2>3. Python-Versionen zentral installieren<\/h2>\n<p>Python-Versionen k\u00f6nnen mit <code>uv<\/code> direkt in das zentrale Installationsverzeichnis installiert werden.<\/p>\n<p>Beispiel f\u00fcr Python 3.12:<\/p>\n<pre class=\"lang:default decode:true\">sudo uv python install 3.12 --install-dir \/opt\/python<\/pre>\n<p>Weitere Versionen k\u00f6nnen entsprechend installiert werden:<\/p>\n<pre class=\"lang:default decode:true\">sudo uv python install 3.13 --install-dir \/opt\/python\r\nsudo uv python install 3.14 --install-dir \/opt\/python<\/pre>\n<p>Die genaue Verzeichnisstruktur innerhalb von <code>\/opt\/python<\/code> wird von <code>uv<\/code> verwaltet und sollte nicht manuell ver\u00e4ndert werden.<\/p>\n<h2>4. Berechtigungen festlegen<\/h2>\n<p>Die zentral installierten Python-Versionen sollen von allen Benutzern verwendet, aber nur von <code>root<\/code> ver\u00e4ndert werden k\u00f6nnen:<\/p>\n<pre class=\"lang:default decode:true\">sudo chown -R root:root \/opt\/python\r\nsudo chmod -R a+rX \/opt\/python<\/pre>\n<p>&nbsp;<\/p>\n<table>\n<thead>\n<tr>\n<th>Benutzer<\/th>\n<th>Berechtigung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>root<\/code><\/td>\n<td>Lesen, Ausf\u00fchren und Ver\u00e4ndern<\/td>\n<\/tr>\n<tr>\n<td>Normale Benutzer<\/td>\n<td>Lesen und Ausf\u00fchren<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>5. Installationsverzeichnis f\u00fcr uv festlegen<\/h2>\n<p>Damit <code>uv<\/code> das zentrale Python-Verzeichnis dauerhaft verwendet, wird die Umgebungsvariable systemweit gesetzt:<\/p>\n<pre class=\"lang:default decode:true\">echo 'export UV_PYTHON_INSTALL_DIR=\/opt\/python' | sudo tee \/etc\/profile.d\/uv-python.sh\r\nsudo chmod 644 \/etc\/profile.d\/uv-python.sh<\/pre>\n<p>F\u00fcr die aktuelle Sitzung kann die Konfiguration sofort geladen werden:<\/p>\n<pre class=\"lang:default decode:true \">source \/etc\/profile.d\/uv-python.sh<\/pre>\n<p>Die Konfiguration kann anschlie\u00dfend \u00fcberpr\u00fcft werden:<\/p>\n<pre class=\"lang:default decode:true\">uv python dir<\/pre>\n<p>Erwartetes Ergebnis:<\/p>\n<pre class=\"lang:default decode:true\">\/opt\/python<\/pre>\n<h2>6. Installierte Python-Versionen anzeigen<\/h2>\n<p>Mit folgendem Befehl lassen sich die von <code>uv<\/code> verf\u00fcgbaren und installierten Python-Versionen anzeigen:<\/p>\n<pre class=\"lang:default decode:true\">uv python list<\/pre>\n<h2>7. Virtuelle Umgebung f\u00fcr einen Benutzer erstellen<\/h2>\n<p>Die folgenden Schritte werden als Benutzer <code>User<\/code> ausgef\u00fchrt.<\/p>\n<p>Zun\u00e4chst wird ein Projektverzeichnis erstellt:<\/p>\n<pre class=\"lang:default decode:true\">mkdir ~\/projekt\r\ncd ~\/projekt<\/pre>\n<p>Anschlie\u00dfend wird eine virtuelle Umgebung mit bespielsweise Python 3.12 erstellt:<\/p>\n<pre class=\"lang:default decode:true\">uv venv --python 3.12<\/pre>\n<p>Dadurch entsteht:<\/p>\n<pre class=\"lang:default decode:true \">\/home\/User\/projekt\/\r\n\u2514\u2500\u2500 .venv\/<\/pre>\n<p>Die virtuelle Umgebung geh\u00f6rt vollst\u00e4ndig dem Benutzer <code>User<\/code>.<\/p>\n<h2>8. Virtuelle Umgebung aktivieren<\/h2>\n<pre class=\"lang:default decode:true \">source .venv\/bin\/activate<\/pre>\n<p>Die verwendete Python-Version kann anschlie\u00dfend \u00fcberpr\u00fcft werden:<\/p>\n<pre class=\"lang:default decode:true \">python --version<\/pre>\n<p>Beispielsweise:<\/p>\n<pre class=\"lang:default decode:true\">Python 3.12.x<\/pre>\n<p>Auch der tats\u00e4chlich verwendete Python-Interpreter kann kontrolliert werden:<\/p>\n<pre class=\"lang:default decode:true\">which python<\/pre>\n<p>Erwartetes Ergebnis:<\/p>\n<pre class=\"lang:default decode:true \">\/home\/User\/projekt\/.venv\/bin\/python<\/pre>\n<h2>9. Python-Pakete mit uv installieren<\/h2>\n<p>Pakete werden innerhalb der virtuellen Umgebung mit <code>uv<\/code> installiert:<\/p>\n<pre class=\"lang:default decode:true\">uv pip install requests<\/pre>\n<p>Weitere Pakete k\u00f6nnen beispielsweise so installiert werden:<\/p>\n<pre class=\"lang:default decode:true\">uv pip install flask fastapi<\/pre>\n<p>Die Pakete werden ausschlie\u00dflich in der virtuellen Umgebung des jeweiligen Projekts installiert.<\/p>\n<p>Die zentrale Python-Installation unter <code>\/opt\/python<\/code> bleibt dabei unver\u00e4ndert.<\/p>\n<h2>Ergebnis<\/h2>\n<pre class=\"lang:default decode:true \">   root\r\n                     \u2502\r\n             \/usr\/local\/bin\/uv\r\n                     \u2502\r\n              \/opt\/python\/\r\n                \u2502    \u2502    \u2502\r\n              3.12  3.13  3.14\r\n                \u2502    \u2502    \u2502\r\n                \u2514\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2518\r\n                     \u2502\r\n                   uv venv\r\n                     \u2502\r\n                \/home\/User\/\r\n                     \u2502\r\n                   projekt\/\r\n                     \u2502\r\n                   .venv\/\r\n                     \u2502\r\n              eigene Pak<\/pre>\n<table>\n<thead>\n<tr>\n<th>Bereich<\/th>\n<th>Verantwortlich<\/th>\n<th>Zweck<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>\/usr\/local\/bin\/uv<\/code><\/td>\n<td><code>root<\/code><\/td>\n<td>Zentrales Werkzeug<\/td>\n<\/tr>\n<tr>\n<td><code>\/opt\/python\/<\/code><\/td>\n<td><code>root<\/code><\/td>\n<td>Zentrale Python-Versionen<\/td>\n<\/tr>\n<tr>\n<td><code>~\/projekt\/.venv\/<\/code><\/td>\n<td><code>User<\/code><\/td>\n<td>Virtuelle Umgebung<\/td>\n<\/tr>\n<tr>\n<td>Pakete innerhalb von <code>.venv<\/code><\/td>\n<td><code>User<\/code><\/td>\n<td>Projektabh\u00e4ngigkeiten<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Eine Python-Version, beispielsweise Python 3.13, wird damit nur einmal zentral installiert. Der Benutzer <code>User<\/code> kann daraus beliebig viele eigene virtuelle Umgebungen erstellen, ohne die zentrale Python-Installation oder andere Projekte zu ver\u00e4ndern.<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit uv lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden. Dieses Setup verfolgt eine klare Trennung: Python-Versionen werden zentral unter \/opt\/python installiert. uv wird systemweit unter \/usr\/local\/bin\/uv bereitgestellt. Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt. Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8894","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/allgemein\/\" rel=\"category tag\">Allgemein<\/a>","rttpg_excerpt":"Mit uv lassen sich mehrere Python-Versionen zentral auf einem Linux-System installieren und anschlie\u00dfend f\u00fcr unterschiedliche Projekte in voneinander getrennten virtuellen Umgebungen verwenden. Dieses Setup verfolgt eine klare Trennung: Python-Versionen werden zentral unter \/opt\/python installiert. uv wird systemweit unter \/usr\/local\/bin\/uv bereitgestellt. Virtuelle Umgebungen werden pro Benutzer und Projekt erstellt. Python-Pakete werden ausschlie\u00dflich innerhalb der jeweiligen virtuellen&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8894"}],"version-history":[{"count":6,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894\/revisions"}],"predecessor-version":[{"id":8900,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8894\/revisions\/8900"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}