"owned by OS" bei upgrade versuch (debian)

Probleme bei der Installation?
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

__deets__ hat geschrieben: Samstag 8. September 2018, 17:43 Weder pip und virtualenv alleine noch die Kombination mit pipenv kann die Python Version ändern. Wenn du 3.6 willst (3.7 ist released, kannst du also auch nehmen) musst du die selbst installieren.

Wo du irrst ist, dass die bestehende Installation ein Problem darstellt. Normalerweise nicht. Virtualenv isoliert dich von anderen Paketen. Sofern der python Interpreter nicht total verfummelt ist, ist alles gut.
dann erschließt sich mir der Sinn einer v.env nicht so richtig. Ich weiß aus eigener Erfahrung, dass es eine riesige Katastrophe geben kann, wenn man sich nicht perfekt auskennt und python 2, python 3 und vllt noch andere python installationen wie python anaconda oder wie das heißt, installiert. Das gibt ein einziges wirrwar. Daher dachte ich jetzt, dass nun also python direkt in so eine v. env. rein installiere und so alles gut ist (und python getrennt vom OS ist)

Warum es hilfreich sein sollte installierte Module voneinander zu trennen, sehe ich nicht, was ja dann der einzige Sinn von v. env zu sein scheint?

Daher werd ich mich auch hüten auf dem System wo nun schon 2.7 und 3.4 "vermurkst" sind, auch noch python 3.6 (3.7) zu installieren... Dann lieber erstmal alles python spezifische deinstallieren und nur 3.6 (oder 3.7) installieren und sonst nichts.
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

Immerhin habe ich eine offizielle Antwort gefunden, dass sich signalr-client wegen gevent und wegen setuptools nicht installieren lässt:
http://www.gevent.org/install.html
If you see ValueError: ("Expected ',' or end-of-list in", "cffi >= 1.11.5 ; sys_platform == 'win32' and platform_python_implementation == 'CPython'", 'at', " ; sys_platform == 'win32' and platform_python_implementation == 'CPython'"), the version of setuptools is too old. Install a more recent version of setuptools.
Bleibt also weiterhin die Frage offen, wie ich setuptools upgrade =(
Oder wie ich alle versionen von python deinstalliere und dann sauber und korrekt mit funktionierenden upgrades die neuste python version installiere...
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Scholastik: Venvs sind genau dazu da, das Problem zu lösen, das du gerade hast: Du möchtest ein Paket in einer bestimmten Version installieren. In deinem Fall `setuptools`. Problem: Setuptools ist bereits installiert, aber in einer anderen Version als von dir gewünscht/gebraucht. Und irgend ein anderes Paket/Modul hängt von der älteren Version ab. Ergo: Du möchtest zwei verschiedene Versionen gleichzeitig haben. Das geht, indem du die neue (die nur von `signalr-client`benötigt wird) in eine Venv installierst.

Wenn du ein anderes Python als 2.7 oder 3.4 nutzen möchtest, musst du entweder auf Debian stable aktualisieren (potentiell nervig) oder das andere Python an der Paketverwaltung vorbei installieren. Etwa wie hier bei ubuntuusers.de beschrieben. Python 3.7 ist im Prinzip kein Problem, wenn alle verwendeten Module es unterstützen.

Alles, was mit Python zusammenhängt, zu deinstallieren, wird nicht möglich sein, weil die Debian-Basisinstallation an sich auch von Python abhängt. Sollte aber auch nicht nötig sein, weil verschiedene Python-Versionen nebeneinander existieren können, ohne sich zu stören.

Mit dem Projektverzeichnis ist das Verzeichnis gemeint, in dem dein Projekt gespeichert ist. Pipenv ordnet jedem Verzeichnis, in dem eine Datei mit dem Namen `Pipfile` existiert, eine eigene Venv zu. Wenn du dein Programm dann mit systemd starten möchtest, musst du dementsprechend das Arbeitsverzeichnis in der Service Unit auf das Projektverzeichnis setzen.

Hintergrundlektüre: http://pipenv.org
Scholastik
User
Beiträge: 53
Registriert: Freitag 7. Juli 2017, 12:35

@narpfel: Naja, so ganz korrekt ist dein erster Absatz nicht. Ich will und brauche nur die aktuellste setuptools. Doch OS lässt mich nichts aktualisieren. Auch pip und andere (vermutlich auf debian vorinstallierte) Dinge lassen sich nicht aktualisieren. Wundert mich, dass Debian zwanghaft die veraltete Version will bzw warum es nicht standardmäßig möglich ist, neuere Versionen ohne v.env zu nutzen, während das OS seine alte version behalten kann.

Naja, ich hab jedenfalls erstmal genug davon...
Ich habe mir nun stattdessen "signalr-clients-threads" installiert, das kommt ohne gevent aus und ist hoffentlich kein so großer performance verlust.

Dennoch würde ich mich noch über eine Anleitung freuen, wie ich beim nächsten mal wenn ich Debian neu installiere, sicherstelle, dass alles seine Ordnung hat und upgradebar ist, ohne v.env nutzen zu müssen. Denn entweder ist es auf debian immer so dass ich nichts von den vorinstallierten Dingen upgraden kann, oder ich habe bei der Installation Mist gebaut. Aktuell halte ich beides für gleich wahrscheinlich.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Hast du es denn mal versucht, `setuptools` als normaler Benutzer mit `pip` zu installieren? Das sollte eigentlich auch dann funktionieren, wenn `setuptools` über den Paketmanager installiert ist.

Es mag sein, dass du nur das aktuellste `setuptools` willst, aber andere Python-Pakete (die über den Paketmanager der Distribution installiert sind) können vom alten `setuptools` abhängen. Wenn nichts von `python3-setuptools` abhängt, dann kannst du das einfach deinstallieren und die neue Version mit `pip` installieren.

Deine Anleitung ist der Wiki-Artikel von Ubuntuusers, den ich verlinkt habe. Wenn du komplett unabhängig vom Paketmanager der Distribution sein willst, musst du alles selber installieren.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Scholastik: Es ist nicht das OS was Dich das nicht installieren lässt. Da ist irgendetwas komisch bei Dir. Denn diese Meldung „owned by OS“ ist nur ein Hinweis das die alte Version nicht deinstalliert wurde. Was aber auch gar nicht nötig ist, weil normalerweise trotzdem die neue Version installiert wird, und zwar in Verzeichnisse in denen vor denen vom Betriebssystem gesucht wird. Deine Installation endet ja auch mit der Aussage „Successfully installed setuptools“. Warum das dann bei Dir letztendlich doch nicht funktioniert kann ich nicht sagen, aber ich kann sagen das ich so etwas schon sehr oft erfolgreich gemacht habe.

Debian ”will zwanghaft” die Version benutzen von denen die Debian-Maintainer wissen das sie mit allen anderen Paketen der Distributionsversion korrekt zusammenarbeiten. Es ist ja möglich neue Versionen an der Paketverwaltung vorbei zu installieren, aber man muss sich dann natürlich auch im klaren darüber sein, das andere Software aus den Paketquellen dann möglicherweise mit der neuen Version einer Bibliothek nicht klar kommt, weil sich die API geändert hat und/oder endweder neue Bugs hinzugekommen sind oder welche weggefallen sind.

Solche Probleme umgeht man mit einem venv.

Ich selbst bin da im Moment selbst erst langsam am Umsteigen, weil ich vor `pipenv` lieber einen Benutzer pro Webanwendung angelegt und dann lokal für diesen Benutzer neue Python-Pakete installiert habe.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Ich hab dir mal etwas zusammengebastelt. Gib uns mal bitte Rückmeldung wo es dann hackt.

Code: Alles auswählen

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

#runterladen von 3.7
cd /usr/src
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
#Entpacken    
sudo tar xzf Python-3.7.0.tgz

cd Python-3.7.0
sudo ./configure --enable-optimizations
sudo make altinstall
#make altinstall is used to prevent replacing the default python binary file /usr/bin/python.

#Check ob 3.7 installiert ist
python3.7 -V

#install pipenv 
## @all wäre  -m & --user doppelt gemoppelt?
sudo python3 -m pip install pipenv

cd ~
mkdir PYTHONPRojektNAME
#ab hier bist du im PyProjekt, wo auch die Env angelegt werden soll
pipenv --python 3.7
pipenv update
pipenv install signalr-client
    
So macht es zumindest in meinem Kopf Sinn. Du kannst dich ja da einmal durch arbeiten. Ganz ohne Google und Foren ist die Hürde für Anfänger immer groß aber Pipenv macht bereits vieles einfacher! Die Einarbeitung in dieses macht sehr viel Sinn.

Falls du dich nicht in das UnixSystem und Py Kram eindenken kannst, vielleicht hier dir eine IDE wie Pycharm weiter. Dort kannst du viel durch Fenster und klicken einstellen. Ggf. hilft dir das mehr
Antworten