# Python neu bauen

## BastiL

Hallo zusammen,

ich habe mit einigen Python-Bibs Probleme die ich in der Vergangenheit schon mal hatte. Damals ist das nach einiger Zeit verschwunden. Ich gehe davon aus, dass ich durch Neubau aller Python-Bibs das Problem lösen kann.

Was ist der beste Weg Python mitsamt allen Abhängigkeiten neu zu bauen?

----------

## mike155

Das scheint mir doch ein XY-Problem zu sein.

X : irgendetwas funktioniert mit den Python-Bibliotheken nicht

Y: Du denkst, Du kannst es mit einem Neubau der Bibliotheken lösen. Also fragst Du, wie man die Bibliotheken neubauen kann

Wäre es nicht viel besser, das eigentliche Problem X zu lösen?

Also: was ist das Problem mit den Bibliotheken? Was geht nicht? Gibt es Fehlermeldungen? Wann tritt es auf? Hast Du irgendetwas am System umkonfiguriert?

----------

## Max Steel

Welche python-version betrifft es, was ist die Ausgabe von EMERGE_DEFAULT_OPTS="" emerge --info . Und wie mike schon gefragt hat. Was geht nicht?

----------

## BastiL

Was geht nicht mehr? Das Paket openopt. Das muss sowieso modifiziert werden, damit es mit python3.9 funktioniert. Das Paket ist nicht im portage-tree, ich installiere es mit pip.

Das Paket wirft folgenden Fehler, wenn ich eines der Beispiele ausführen möchte:

```

In [2]: from numpy import *

   ...: from openopt import LP

   ...: f = array([15,8,80])

   ...: A = mat('1 2 3; 8 15 80; 8 80 15; -100 -10 -1') # numpy.ndarray is also allowed

   ...: b = [15, 80, 150, -800] # numpy.ndarray, matrix etc are also allowed

   ...: Aeq = mat('80 8 15; 1 10 100') # numpy.ndarray is also allowed

   ...: beq = (750, 80)

In [3]: lb = [4, -80, -inf]

   ...: ub = [inf, -8, inf]

   ...: p = LP(f, A=A, Aeq=Aeq, b=b, beq=beq, lb=lb, ub=ub)

   ...: #or p = LP(f=f, A=A, Aeq=Aeq, b=b, beq=beq, lb=lb, ub=ub)

In [4]: r = p.minimize('glpk')

------------------------- OpenOpt 0.5629 -------------------------

problem: unnamed   type: LP    goal: minimum

solver: glpk

variables: 3

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-4-70919cc5a654> in <module>

----> 1 r = p.minimize('glpk')

~/.local/lib/python3.9/site-packages/openopt/kernel/baseProblem.py in <lambda>(*args, **kwargs)

    223             if 'min' in self.allowedGoals:

    224                 self.minimize = lambda *args, **kwargs: \

--> 225                 minimize(self, *args, **kwargs)

    226             if 'max' in self.allowedGoals:

    227                 self.maximize = lambda *args, **kwargs: \

~/.local/lib/python3.9/site-packages/openopt/kernel/baseProblem.py in minimize(p, *args, **kwargs)

    622             p.err('ambiguous goal has been requested: function "minimize", goal: %s' %  kwargs['goal'])

    623     p.goal = 'minimum'

--> 624     return runProbSolver(p, *args, **kwargs)

    625 

    626 def maximize(p, *args, **kwargs):

~/.local/lib/python3.9/site-packages/openopt/kernel/runProbSolver.py in runProbSolver(p_, solver_str_or_instance, *args, **kwargs)

    276             s = 'constaints:  '

    277             hasLinearC = p.nb != 0 or p.nbeq != 0

--> 278             hasNonLinearC = p.nc != 0 or p.nh != 0

    279             if p.hasLogicalConstraints:

    280                 s += '{%d logical}' % p.nLogicalConstraints

AttributeError: 'LP' object has no attribute 'nc'

```

Das Paket wird nicht mehr/nur noch sehr rudimentär weiterentwickelt. Ich bin bei Python3.9. Um es dort nutzen zu können, muss man die "from time import clock"-Aufrufe eliminieren, die es seit python3.8 nicht mehr gibt.

Danach bekomme ich obiges Problem. Das Problem hatte ich aber vor python3.8 mit demselben Paket schon einmal. Damals hat es sich nach einiger Zeit von selbst repariert, daher eine Vermutung mit dem Neubau.

----------

## mike155

Eins vorweg: ich bin kein Python-Experte! Wenn also gleich jemand etwas komplett anderes schreibt, glaube eher demjenigen.

Das Mischen von Portage-Paketen und Pip-Paketen ist sicherlich keine gute Idee. 

Generell gilt, dass nur Portage in die Systemverzeichnisse schreiben sollte!!! 

Wenn man selbst Dateien in die Systemverzeichnisse kopiert oder wenn man zusätzlich zu Portage einen anderen Paket-Manager verwendet, sind Probleme schon fast vorprogrammiert! Ähnliches schreibt auch die Gentoo PIP-Seite:

 *Quote:*   

> Important
> 
> It is important to understand that packages installed using pip will not be tracked by Portage. This is the case for installing any package through means other than the emerge command. Possible conflicts can be created when installing a Python package that is available in the Portage tree, then installing the same package using pip.
> 
> Decide which package manager will work best for the use case: either use emerge or pip for Python packages, but not both. Some Python packages are not available in the Portage tree, in these cases the only option is to use pip. One possibility is to use the --user option to install Python packages in a user's home directory. This will avoid conflicts with Portage. Be wise and make good choices!

 

Hier solltest Du noch einmal überlegen, wie Du vorgehst und wie Du Chaos vermeidest. Also entweder "--user"-Option, oder nur Python oder nur pip.

Wenn Du Module hast, die nicht mit Python 3.9 funktionieren: installiere doch einfach Python 3.8 zusätzlich und verwende diese Pakete mit Python 3.8! Python ist "slotted", d.h. man kann mehrere Versionen parallel installieren.

 *Quote:*   

> Das Paket wird nicht mehr/nur noch sehr rudimentär weiterentwickelt.

 

In solchen Fällen solltest Du anfangen, nach Ersatz zu suchen.

Früher, zu Zeiten der alten Hasen wie Knuth, Dijkstra, usw. galt: man entwickelt Software, bis sie perfekt ist. Dann veröffentlicht man sie - und dann kann sie die nächsten zehntausend Jahre genutzt werden.

Das gilt heute nicht mehr. Heute gilt: Software erfordert permanente Pflege und Anpassungen. Sobald die Autoren aufhören, ihre Software zu pflegen, ist sie mehr oder weniger tot. Als Anwender kann man dann nur noch rennen und sich etwas Neues suchen. Es ist traurig, dass es so ist.  :Sad: 

----------

## firefly

 *mike155 wrote:*   

> 
> 
> Hier solltest Du noch einmal überlegen, wie Du vorgehst und wie Du Chaos vermeidest. Also entweder "--user"-Option, oder nur Python oder nur pip.

 

das paket ist wohl schon via --user installiert siehe mit was die Pfade beginnen "~/.local/"

----------

## BastiL

 *mike155 wrote:*   

> Hier solltest Du noch einmal überlegen, wie Du vorgehst und wie Du Chaos vermeidest. Also entweder "--user"-Option, oder nur Python oder nur pip.

 

Weiss ich, darüber bin ich mir bewusst. Ich habe alles mit "--user" installiert, was von pip her kommt.

 *mike155 wrote:*   

>  *Quote:*   Das Paket wird nicht mehr/nur noch sehr rudimentär weiterentwickelt. 
> 
> In solchen Fällen solltest Du anfangen, nach Ersatz zu suchen.

 

Darüber bin ich mir im Klaren. Bisher habe ich da nichts gefunden, dass den Funktionsumfang anbietet den ich brauche. Und das erfordert auf jeden Fall größere Umstellungen an meinem Code.

----------

## mike155

 *firefly wrote:*   

> das paket ist wohl schon via --user installiert siehe mit was die Pfade beginnen "~/.local/"

 

Ah! Um so besser!   :Smile: 

Verstehe ich es richtig, dass es nur Probleme mit dem mit pip installierten Paket gibt? Dann müssen doch sicherlich nicht die mit emerge installierten Python-Pakete neu gebaut werden, oder?

Würde es dann nicht ausreichen, Python 3.8 zu installieren? 

Also

```
*/* PYTHON_TARGETS: python3_8
```

nach '/etc/portage/package.use' und dann:

```
emerge --update --deep --changed-use -av @world
```

Dadurch wird Python 3.8 installiert. Weiters werden alle erforderlichen mit Portage installierten Pakete re-installiert, damit sie auch mit Python 3.8 funktionieren.

Danach müsste man pip und die mit pip installierten Pakete noch davon überzeugen, dass Python 3.8 verwendet werden soll. Ich weiß aber nicht, wie das geht.

----------

## BastiL

Ganz so easy ist es nicht ....

1. Die letzte Version mit der openopt ohne Modifikationen funktioniert ist python3.7, wenn muss ich es damit testen. Ich glaube aber nicht, dass das das Problem ist, weil ich genau diesen Fehler in der Vergangenheit auch schon hatte.

2. Die pip-Installationen müssen dann für jede Python-Version gemacht werden, das ist aber kein Problem.

3. es geht um Python-Makros die ich aus libreoffice heraus aufrufe. Ich müsste dann also in einem zweiten Schritt auch libreoffice davon überzeugen, python3.7 zu benutzen

4. Hat die Neuinstallation von openopt via pip keine Abhilfe geschaffen; aufgrund meiner Erfahrungen aus der Vergangenheit vermute ich immer noch das ein Neubau von Python 3.9 mit allem das Problem eventuell lösten könnte. Die Tatsache das ein vorhandenes Modul nicht gefunden wird kann ja schon etwas mit einem "Defekt" irgendwo innerhalb der Python-Umgebung zu tun haben.

Ich werde jetzt mal versuchen, ob ich das Problem mit Python3.7 auch habe oder nicht. Nichtsdestoweniger würde ich gerne versuchen pyhon3.9 komplett neu zu bauen.

----------

## Max Steel

libreoffice kann mit den entsprechenden PYTHON_SINGLE_TARGET USE Flags gebaut werden.

das ist übrigens auch der Grund für meine Frage nach emerge --info von ganz oben

Eventuell jetzt sogar spezieller: emerge --info app-office/libreoffice

----------

## BastiL

Hier:

```

emerge --info app-office/libreoffice

Portage 3.0.22 (python 3.9.6-final-0, default/linux/amd64/17.1/desktop, gcc-11.2.0, glibc-2.33-r7, 5.13.9-gentoo x86_64)

=================================================================

                         System Settings

=================================================================

System uname: Linux-5.13.9-gentoo-x86_64-AMD_Ryzen_5_3500U_with_Radeon_Vega_Mobile_Gfx-with-glibc2.33

KiB Mem:    14258980 total,  10405552 free

KiB Swap:    8388604 total,   8388604 free

Head commit of repository gentoo: afef96b6a369e6b14388ac83906664e84b5b0329

sh bash 5.1_p8

ld GNU ld (Gentoo 2.36.1 p5) 2.36.1

app-shells/bash:          5.1_p8::gentoo

dev-java/java-config:     2.3.1::gentoo

dev-lang/perl:            5.34.0-r2::gentoo

dev-lang/python:          2.7.18_p11::gentoo, 3.8.11::gentoo, 3.9.6_p1::gentoo, 3.10.0_rc1_p1::gentoo

dev-lang/rust:            1.54.0::gentoo

dev-util/cmake:           3.21.1::gentoo

sys-apps/baselayout:      2.7-r3::gentoo

sys-apps/sandbox:         2.24::gentoo

sys-devel/autoconf:       2.13-r1::gentoo, 2.71-r1::gentoo

sys-devel/automake:       1.13.4-r2::gentoo, 1.16.4::gentoo

sys-devel/binutils:       2.36.1-r2::gentoo, 2.37_p1::gentoo

sys-devel/gcc:            10.3.0-r2::gentoo, 11.2.0::gentoo

sys-devel/gcc-config:     2.4::gentoo

sys-devel/libtool:        2.4.6-r6::gentoo

sys-devel/make:           4.3::gentoo

sys-kernel/linux-headers: 5.13::gentoo (virtual/os-headers)

sys-libs/glibc:           2.33-r7::gentoo

Repositories:

gentoo

    location: /usr/portage

    sync-type: git

    sync-uri: https://github.com/gentoo/gentoo.git

    priority: -1000

bombo82

    location: /var/lib/layman/bombo82

    masters: gentoo

    priority: 50

vifino-overlay

    location: /var/lib/layman/vifino-overlay

    masters: gentoo

    priority: 50

ACCEPT_KEYWORDS="amd64 ~amd64"

ACCEPT_LICENSE="*"

CBUILD="x86_64-pc-linux-gnu"

CFLAGS="-O2 -pipe"

CHOST="x86_64-pc-linux-gnu"

CONFIG_PROTECT="/etc /usr/lib64/libreoffice/program/sofficerc /usr/share/config /usr/share/gnupg/qualified.txt"

CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php7.4/ext-active/ /etc/php/apache2-php8.0/ext-active/ /etc/php/cgi-php7.4/ext-active/ /etc/php/cgi-php8.0/ext-active/ /etc/php/cli-php7.4/ext-active/ /etc/php/cli-php8.0/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"

CXXFLAGS="-O2 -pipe"

DISTDIR="/usr/portage/distfiles"

ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR"

FCFLAGS="-O2 -pipe"

FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"

FFLAGS="-O2 -pipe"

GENTOO_MIRRORS="ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/gentoo/ http://ftp-stud.hs-esslingen.de/pub/Mirrors/gentoo/ ftp://mirror.netcologne.de/gentoo/"

LANG="de_DE.UTF-8"

LDFLAGS="-Wl,-O1 -Wl,--as-needed"

LINGUAS="de"

MAKEOPTS="-j7"

PKGDIR="/var/cache/binpkgs"

PORTAGE_CONFIGROOT="/"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"

PORTAGE_TMPDIR="/var/tmp"

USE="X a52 aac acl acpi alsa amd64 bluetooth bluetoothi branding bzip2 cairo cdda cdr cli crypt cups dbus dri dts dvd dvdr emboss encode examples exif fbcondecoder ffmpeg flac fortran gdbm gif gpm gui iconv icu ipv6 jpeg lcms libglvnd libnotify libtirpc mad mng mp3 mp4 mpeg mpi mtp multilib ncurses networkmanager nls nptl ogg opengl openmp pam pango pcre pdf png policykit ppds pulseaudio python qt5 readline sddm sdl seccomp spell split-usr ssl startup-notification svg systemd tcpd tiff truetype udev udisks unicode upower usb v4l vorbis wayland wxwidgets x264 xattr xcb xml xv xvid zlib" ABI_X86="32 64" ADA_TARGET="gnat_2018" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="evdev synaptics" KERNEL="linux" L10N="de" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-3 php7-4" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_9" PYTHON_TARGETS="python3_9" RUBY_TARGETS="ruby26" USERLAND="GNU" VIDEO_CARDS="amdgpu radeonsi" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account"

Unset:  CC, CPPFLAGS, CTARGET, CXX, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RUSTFLAGS

=================================================================

                        Package Settings

=================================================================

app-office/libreoffice-7.1.5.2::gentoo was built with the following:

USE="bluetooth branding cups dbus gtk java mariadb -accessibility -base -clang -coinmp -custom-cflags -debug -eds -firebird -googledrive -gstreamer -kde -ldap -odk -pdfimport -postgres -test -vulkan" ABI_X86="(64)" LIBREOFFICE_EXTENSIONS="-nlpsolver -scripting-beanshell -scripting-javascript -wiki-publisher" PYTHON_SINGLE_TARGET="python3_9 -python3_10 -python3_8"

FEATURES="config-protect-if-modified multilib-strict unknown-features-warn binpkg-dostrip binpkg-docompress news network-sandbox ebuild-locks parallel-fetch usersandbox usersync merge-sync binpkg-logs unmerge-logs sfperms protect-owned ipc-sandbox unmerge-orphans userfetch userpriv sandbox fixlafiles xattr pid-sandbox binpkg-multi-instance preserve-libs assume-digests qa-unresolved-soname-deps distlocks strict"

```

----------

## BastiL

Ich habe vergessen zu erwähnen, dass das Problem nach dem Update von PYthon3.7 auf Python 3.9 aufgetreten ist. Python 3.8. hatte ich nicht produktiv. In der Vergangenheit ist das Problem auch nach einem Python-Update aufgetreten, deshalb ja meine Vermutung, dass hier noch etwas "vermischt" ist und Python nicht 100% sauber auf 3.9 upgedatet ist.

Darum meine Frage wie ich das komplett neu bauen kann um auszuschließen, dass es daran liegt. Danke.

----------

## firefly

 *BastiL wrote:*   

> Ich habe vergessen zu erwähnen, dass das Problem nach dem Update von PYthon3.7 auf Python 3.9 aufgetreten ist. Python 3.8. hatte ich nicht produktiv. In der Vergangenheit ist das Problem auch nach einem Python-Update aufgetreten, deshalb ja meine Vermutung, dass hier noch etwas "vermischt" ist und Python nicht 100% sauber auf 3.9 upgedatet ist.

 

Das denke ich nicht. Da du selbst sagtest dass die library mit python 3.7 ohne modifikation läuft. Ich denke eher dass python 3.9 Änderungen hat welche Anpassungen am code benötigen.

Edit und das ist auch der fall:

Aus deinem fehler ausgabe der relevante teil

 *Quote:*   

> ~/.local/lib/python3.9/site-packages/openopt/kernel/runProbSolver.py in runProbSolver(p_, solver_str_or_instance, *args, **kwargs)
> 
>     276             s = 'constaints:  '
> 
>     277             hasLinearC = p.nb != 0 or p.nbeq != 0
> ...

 

Das Objekt "LP" hat kein attribut mit dem namen "nc". Vermutlich stammt das "LP" Objekt nicht von openopt selbst sondern von einer abhängigkeit. Und diese hat die definition der Attribute verändert.

----------

## Josef.95

Hm ja, dieses openopt ist uralt und wahrscheinlich inzwischen inkompatibel/tot, letzter release ist von 2012 --> https://openopt.org

----------

## firefly

 *Josef.95 wrote:*   

> Hm ja, dieses openopt ist uralt und wahrscheinlich inzwischen inkompatibel/tot, letzter release ist von 2012 --> https://openopt.org

 

auf pypi (vermutlich auf das pip zugreift) gibt es einen release von 2018

https://pypi.org/project/openopt/

----------

## BastiL

Ich habe inzwischen die Optimierung auf scipy umgestellt, das hat erstaunlich gut funktioniert und ist auch noch deutlich schneller. Außerdem ist die Bibliothek deutlich mehr "Standard".

----------

