"bootstrap_env" - war: Py2 und Py3 setuptools boot...

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Da dachte ich, mit dem neuen PyLucid "django-cms" branch setzte ich direkt alles auf Python 3, aber ich hab gerade zweifel ob das so eine gute Idee ist...

Ich hab ja ein setuptools "bootstrap" skript: https://github.com/jedie/PyLucid/tree/d ... /bootstrap

Das scheint man anscheinend schon nicht gleichzeitig für Py2 und 3 lauffähig zu bekommen. (Glaube ich zumindest)

Nun wollte ich es selber nutzten, mit diesem Resultat:

Code: Alles auswählen

~$ python3 pylucid-boot.py PyLucid_env_py3
PyLucid virtual environment bootstrap

Create PyLucid environment in: PyLucid_env_py3

git found in: /usr/bin/git

Please select how the pylucid own projects should be checkout:

(1) normal installation
(2) developer installation

Please select: (1/2) (default: normal) 2
Using base prefix '/usr'
New python executable in PyLucid_env_py3/bin/python3
Also creating executable in PyLucid_env_py3/bin/python
Cannot find a wheel for setuptools
Cannot find a wheel for pip
Installing setuptools, pip...
  Complete output from command /home/jens/PyLucid_env_py3/bin/python3 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'pip'
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "pylucid-boot.py", line 2682, in <module>
    main()
  File "pylucid-boot.py", line 833, in main
    symlink=options.symlink)
  File "pylucid-boot.py", line 1001, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "pylucid-boot.py", line 969, in install_wheel
    'PIP_NO_INDEX': '1'
  File "pylucid-boot.py", line 911, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /home/jens/PyLucid_env_py3/bin/python3 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

~$ python3 --version
Python 3.4.0
Tja, ein wenig gesucht und das gefunden: https://github.com/pypa/virtualenv/issues/564
Letztlich ist es ein Bug im zipimport in Python 3, siehe: http://bugs.python.org/issue20621

Also doch lieber auf Py 3 Pfeifen und bei Py 2 bleiben?

:?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Welche Alternativen zum setuptools bootstrap gibt es eigentlich mittlerweile?

EDIT: Gerade gefunden: http://de.slideshare.net/claytron/curre ... -packaging

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ne, das muß was anderes sein... Denn der selbe Fehler erscheint auch mit Python 2:

Code: Alles auswählen

jens@test-VirtualBox ~/PyLucid_env_py2/src/pylucid/bootstrap $ python2 pylucid-boot.py ~/test_py2 --verbose
PyLucid virtual environment bootstrap

Create PyLucid environment in: /home/jens/test_py2

git found in: /usr/bin/git

Please select how the pylucid own projects should be checkout:

(1) normal installation
(2) developer installation

Please select: (1/2) (default: normal) 2
Creating /home/jens/test_py2/lib/python2.7
Symlinking Python bootstrap modules
  Symlinking /home/jens/test_py2/lib/python2.7/lib-dynload
  Symlinking /home/jens/test_py2/lib/python2.7/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking /home/jens/test_py2/lib/python2.7/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking /home/jens/test_py2/lib/python2.7/ntpath.py
  Symlinking /home/jens/test_py2/lib/python2.7/genericpath.py
  Symlinking /home/jens/test_py2/lib/python2.7/fnmatch.py
  Symlinking /home/jens/test_py2/lib/python2.7/locale.py
  Symlinking /home/jens/test_py2/lib/python2.7/encodings
  Symlinking /home/jens/test_py2/lib/python2.7/codecs.py
  Symlinking /home/jens/test_py2/lib/python2.7/stat.py
  Symlinking /home/jens/test_py2/lib/python2.7/UserDict.py
  Symlinking /home/jens/test_py2/lib/python2.7/copy_reg.py
  Symlinking /home/jens/test_py2/lib/python2.7/types.py
  Symlinking /home/jens/test_py2/lib/python2.7/re.py
  Symlinking /home/jens/test_py2/lib/python2.7/sre.py
  Symlinking /home/jens/test_py2/lib/python2.7/sre_parse.py
  Symlinking /home/jens/test_py2/lib/python2.7/sre_constants.py
  Symlinking /home/jens/test_py2/lib/python2.7/sre_compile.py
  Ignoring built-in bootstrap module: zlib
  Symlinking /home/jens/test_py2/lib/python2.7/warnings.py
  Symlinking /home/jens/test_py2/lib/python2.7/linecache.py
  Symlinking /home/jens/test_py2/lib/python2.7/_abcoll.py
  Symlinking /home/jens/test_py2/lib/python2.7/abc.py
  Symlinking /home/jens/test_py2/lib/python2.7/_weakrefset.py
Creating /home/jens/test_py2/lib/python2.7/site-packages
Writing /home/jens/test_py2/lib/python2.7/site.py
Writing /home/jens/test_py2/lib/python2.7/orig-prefix.txt
Writing /home/jens/test_py2/lib/python2.7/no-global-site-packages.txt
Creating parent directories for /home/jens/test_py2/include
Symlinking /home/jens/test_py2/include/python2.7
Creating /home/jens/test_py2/bin
New python executable in /home/jens/test_py2/bin/python2
Changed mode of /home/jens/test_py2/bin/python2 to 0755
Also creating executable in /home/jens/test_py2/bin/python
Changed mode of /home/jens/test_py2/bin/python to 0755
Testing executable with /home/jens/test_py2/bin/python2 -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))"
Got sys.prefix result: u'/home/jens/test_py2'
Symlinking /home/jens/test_py2/local/lib
Symlinking /home/jens/test_py2/local/include
Symlinking /home/jens/test_py2/local/bin
Creating /home/jens/test_py2/lib/python2.7/distutils
Writing /home/jens/test_py2/lib/python2.7/distutils/__init__.py
Writing /home/jens/test_py2/lib/python2.7/distutils/distutils.cfg
Cannot find a wheel for setuptools
Cannot find a wheel for pip
Installing setuptools, pip...
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
  ImportError: No module named pip
  Complete output from command /home/jens/test_py2/bin/python2 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named pip
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "pylucid-boot.py", line 2682, in <module>
    main()
  File "pylucid-boot.py", line 833, in main
    symlink=options.symlink)
  File "pylucid-boot.py", line 1001, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "pylucid-boot.py", line 969, in install_wheel
    'PIP_NO_INDEX': '1'
  File "pylucid-boot.py", line 911, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /home/jens/test_py2/bin/python2 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1
jens@test-VirtualBox ~/PyLucid_env_py2/src/pylucid/bootstrap $ python2 --version
Python 2.7.6
jens@test-VirtualBox ~/PyLucid_env_py2/src/pylucid/bootstrap $ /home/jens/test_py2/bin/python2 --version
Python 2.7.6
jens@test-VirtualBox ~/PyLucid_env_py2/src/pylucid/bootstrap $ /home/jens/test_py2/bin/python2 -c "import pip"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named pip
jens@test-VirtualBox ~/PyLucid_env_py2/src/pylucid/bootstrap $ 
:K

Ganz auf dem bootstrap Kram verzichten und einen Weg zu Fuss aufzeigen?

EDIT: Was ich mache ist dies hier: http://virtualenv.readthedocs.org/en/la ... ap-scripts

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Oh, interessant ist, das es wiederum mit Python 3 funktioniert:

Code: Alles auswählen

$ python3 test-bootstrap.py ~/test_py3
extend_parser called.
adjust_options args: ['/home/jens/test_py3']
Using base prefix '/usr'
New python executable in /home/jens/test_py3/bin/python3
Also creating executable in /home/jens/test_py3/bin/python
Installing setuptools, pip...done.
after_install from '/home/jens/test_py3'

$ python3 -V
Python 3.4.0
$ python3 -m pip -V
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)

$ ~/test_py3/bin/python -V
Python 3.4.0
$ ~/test_py3/bin/python -m pip -V
pip 1.5.6 from /home/jens/test_py3/lib/python3.4/site-packages (python 3.4)
:shock:


EDIT: Ah, es funktionierte, weil pip und virtualenv installiert waren. Hab nun alle pip/virtualenv pakete deinstalliert und nochmal probiert. Dann fällt es auch mit python3 auf die Nase, mit dem gleichen Fehler...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das ja auch toll:

Code: Alles auswählen

~ $ pyvenv-3.4 test_venv
Error: Command '['/home/jens/test_venv/bin/python3.4', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1

~ $ which pyvenv-3.4 
/usr/bin/pyvenv-3.4
Ist meine Python Installation hin oder was?!?! :evil:

EDIT: Mit "--without-pip" funktioniert es...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es gibt Rückmeldungen von https://github.com/pypa/virtualenv/issues/656 ... Eigentlich ist das Verhalten "normal" und steht auch so in der Docu:
Note
The virtualenv.py script is not supported if run without the necessary pip/setuptools/virtualenv distributions available locally. All of the installation methods above include a virtualenv_support directory alongside virtualenv.py which contains a complete set of pip and setuptools distributions, and so are fully supported.
Aber war das wirklich schon immer so? Oder hatte ich einfach nur immer ein pip eh schon installiert, so das es mir nie aufgefallen war?
Denn auch die PyLucid installations-Anleitungen haben nicht erwähnt, das man pip schon vorher installieren muß. Gestolpert ist das IMHO auch niemand drüber :K

Irgendwie ist zum einen der Umstand doof: So ist doch ein "bootstrap" Skript nur halb fertig, wenn man doch noch vorher was installieren muß :?

Außerdem ist die "Fehlermeldung" (Wenn man davon sprechen kann) auch wenig Hilfreich. Sagt zwar im Prinzip das richtige, aber man kann das dann doch schwer deuten, finde ich...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also früher war es so, das pip einfach über das Internet installiert wurde... Wurde abgeschafft, irgendwann...

Meine Antwort auf die Misere ist folgende: https://github.com/jedie/PyLucid/commit ... b05f7d2602
Dann weiß man, was zu tun ist...

Ansonsten bin ich für eine bessere Lösung: https://github.com/pypa/packaging-problems/issues/55

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Meine Antwort auf die Misere ist folgende: https://github.com/jedie/PyLucid/commit ... b05f7d2602
Die wohl aber falsch ist. Denn es scheint nicht zu reichen, das pip installiert ist. Es muß wohl die "sdist" Dateien da sein...

Also wenn ich das richtig verstehe, kann ein bootstrap nur noch so laufen:

1. ein "virtualenv_support" Verzeichniss erstellen
2. sdist von setuptools download und in virtualenv_support speichern
3. sdist von pip download und in virtualenv_support speichern
4. download bootstrap
5. bootstrap starten

Man man... Wenn das echt so gemacht werden muß, stelle ich das ganze bootstrap Konzept in Frage. Da erscheint es mir einfacher, der User macht alles zu Fuß :K


Ein Grund, das automatische runterladen/installieren von setuptools/pip aus dem Netz raus zu schmeißen, war wohl, das es "potenziell gefährlich" ist.
Schon richtig... Aber nun, muß der Benutzer die Dateien ziehen und irgendwie verifizieren... Das ist doch :evil: denn eigentlich muß er das machen:

1. ein "virtualenv_support" Verzeichniss erstellen
2a. sdist von setuptools download und in virtualenv_support speichern
2b. download verifizieren
3a. sdist von pip download und in virtualenv_support speichern
3b. download verifizieren
4a. download bootstrap
4b. download verifizieren
5. bootstrap starten

Da hätte man lieber Hashwerte der Downloads ins bootstrap Skript packen können...
Also so eine Krücke bauen wie https://bitbucket.org/techtonik/locally ... at=default ? :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, hab nun ein ersten Lösungsansatz mit: https://gist.github.com/jedie/4bc671239 ... 38e87623a0

Dabei wird die "get_pip.py" in die generierte bootstrap Datei eingebaut. Diese wird dann genutzt um pip/setuptools zu installieren.

Siehe auch: https://github.com/pypa/packaging-probl ... t-58489960

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab ein separates Projekt daraus gemacht, siehe: https://github.com/jedie/bootstrap_env

Was meint ihr?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Gerade eine neue Version geschnürt: v0.3.2 :
* https://github.com/jedie/bootstrap_env
* https://pypi.python.org/pypi/bootstrap_env/

Nun kann man es auch unter Windows benutzen :shock:

Außerdem habe ich ein "boot bootstrap_env" dabei gepackt. Also mit dem Projekt erstelltes bootstrap Skript, welches dann ein virtualenv mit bootstrap_env erzeugt.

Das in drei Varianten:
mit GIT read-only:

Code: Alles auswählen

/home/FooBar$ python3 boot_bootstrap_env.py --install_type git_readonly ~/bootstrap_env
Mittels PyPi packages:

Code: Alles auswählen

/home/FooBar$ python3 boot_bootstrap_env.py --install_type pypi ~/bootstrap_env
Und für Entwickler, mit git write rechten (also eigentlich nur ich :? ):

Code: Alles auswählen

/home/FooBar$ python3 boot_bootstrap_env.py --install_type dev ~/bootstrap_env
siehe: https://github.com/jedie/bootstrap_env# ... tstrap_env

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

v0.5.4 ist da: Es hab nämlich Probleme mit PyPy2 unter Windows:

Normalerweise wird nämlich ein "...env/Scripts/" unter Windows erzeugt und darin landet u.a. python.exe
Aber aktuell wird "...env/bin/" erzeugt. Also wie unter posix-Systemen.

siehe: https://github.com/pypa/virtualenv/issues/789 oder auch: https://bitbucket.org/pypy/pypy/issues/ ... t-21247266

Ich hab also das finden des richtigen Verzeichnisses, einfach flexibler gestaltet, siehe: https://github.com/jedie/bootstrap_env/ ... 4285c5eaca


Ich Frage mich allerdings, warum es überhaupt den Unterschied "bin" vs. "Scripts" gibt.
Klar CPython speichert die ".exe" Dateien der setup-entry-points unter "C:\Python34\Scripts" btw. "C:\Python27\Scripts"
Aber das hätte doch auch genauso gut "C:\Python34\bin" heißen können.
Dachte man Windows Benutzer verstehen "Scripts" besser als "bin" ?!?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten