PyPy...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wurde IMHO schon lange nicht mehr über PyPy geredet ;)

Wie sieht's aus, nutzt jemand PyPy mittlerweile?

Einige aktuelle Informationen von der EuroPython 2010 PyPy Talk hier als PDF: http://codespeak.net/svn/pypy/extradoc/ ... k/talk.pdf

Hab gesehen, das man relativ einfach Django zum laufen bekommen kann, siehe: http://code.djangoproject.com/wiki/DjangoAndPyPy

Auch virtualenv soll funktionieren...

Auf speed.pypy.org ist auch Django gelistet:
http://speed.pypy.org/comparison/?exe=2 ... ative+bars

Demnach ist PyPy-c jit über 5x schneller als cpython... Das hört sich doch interessant an...

Es scheint auch immer schneller zu werden (zwar nicht in riesigen schritten, aber halbwegs kontinuierlich): http://speed.pypy.org/timeline/?ben=django&env=tannit

Was wohl noch nicht geht ist MySQLdb...

Es soll aber http://code.google.com/p/pymysql/ (pure Python MySQL client) funktionieren, siehe: http://groups.google.com/group/django-u ... d014c1ad9/
Schon jemand Probiert?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man kann auch einfach pg8000 nehmen, MySQL-Problem gelöst :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Naja pg8000 ist auch noch nicht wirklich vollständig. ENUMs gehen z.B. nicht…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab gerade, wegen dem GIL removal in Python 1.4 Thread nochmal gesucht und das gefunden:
http://2011.djangocon.eu/media/slides/pypy-talk.pdf

Django läuft anscheinend gut unter PyPy und das schnell, siehe: http://bit.ly/pypy-django-bench

Doch an der DB Anbindung krankt es noch. Zwar läuft SQLite ohne Probleme, aber MySQL geht noch nicht wirklich gut, laut dem PDF.
Wobei https://bitbucket.org/pypy/compatibilit ... sql-python nur wenig nötige Änderungen Auflistet. Allerdings findet man auf http://sourceforge.net/projects/mysql-python/ nichts zum Thema PyPy.
Die README von https://github.com/petehunt/PyMySQL liest sich versprechend, daber dazu muß man wohl Django patchen :(

Zu PostgreSQL steht:
RPython psycopg2 compatible lib, requires compiling your own PyPy
Wird wohl noch eine Weile dauern, bis man frei zwischen CPython und PyPy wählen kann.

Die Seite https://fedoraproject.org/wiki/Features/PyPyStack sieht allerdings schon mal interessant aus.

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:

Ich hab es mal getestet:

Code: Alles auswählen

# aktuelles virtualenv bekommen (über pip)
~$ wget https://github.com/pypa/pip/raw/master/contrib/get-pip.py
~$ sudo python get-pip.py
~$ sudo pip install --upgrade virtualenv
~$ sudo ln -s /usr/local/bin/ /usr/bin/virtualenv

~$ wget https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-linux64.tar.bz2
~$ tar xf pypy-1.5-linux64.tar.bz2 
~$ virtualenv -p pypy-c-jit-43780-b590cf6de419-linux64/bin/pypy pypy-env
~$ cd pypy-env/bin
~/pypy-env/bin$ source activate

(pypy-env)~/pypy-env/bin$ source activate
(pypy-env)~/pypy-env/bin$ ./pip install -e git+git://github.com/jedie/PyLucid.git#egg=PyLucid --no-deps
PyLucid ist da... Dann weiter: die requirements installieren... Würde auch direkt ohne --no-deps gemacht werden. Aber pip hängt beim "feedparser":

Code: Alles auswählen

(pypy-env)~/pypy-env/bin$ ./pip install --verbose -r ../src/pylucid/requirements/normal_installation.txt 
Downloading/unpacking feedparser>=5.0.1,<5.1 (from -r ../src/pylucid/requirements/basic_requirements.txt (line 6))
  Ignoring link http://pypi.python.org/packages/source/f/feedparser/feedparser-5.0.tar.gz#md5=983d93bf1f4f8558bc01c08ffea8b61a (from http://pypi.python.org/simple/feedparser/), version 5.0 doesn't match >=5.0.1,<5.1
  Ignoring link http://pypi.python.org/packages/source/f/feedparser/feedparser-4.1.tar.gz#md5=573a8df4d4305b37107040654f52b826 (from http://pypi.python.org/simple/feedparser/), version 4.1 doesn't match >=5.0.1,<5.1
  Ignoring link http://pypi.python.org/packages/source/f/feedparser/feedparser-5.0.zip#md5=67ccf489699d641876ddb370067959d9 (from http://pypi.python.org/simple/feedparser/), version 5.0 doesn't match >=5.0.1,<5.1
  Ignoring link http://pypi.python.org/packages/source/f/feedparser/feedparser-5.0.tar.bz2#md5=88d11b31b31305ea36ba62be8a541a15 (from http://pypi.python.org/simple/feedparser/), version 5.0 doesn't match >=5.0.1,<5.1
  Using version 5.0.1 (newest of versions: 5.0.1, 5.0.1, 5.0.1, 5.0.1, 5.0.1)
  Downloading feedparser-5.0.1.tar.bz2 (204Kb): 204Kb downloaded
Davon steht bei https://bitbucket.org/pypy/compatibilit ... feedparser nichts...


Also mal per Hand weiter machen, mal sehen wie weit man kommt:

Code: Alles auswählen

(pypy-env)~/pypy-env/bin$ ./pip install --verbose Django\>=1.3,\<1.4
(pypy-env)~/pypy-env/bin$ ./pip install --verbose python-creole django-dbpreferences django-tools
(pypy-env)~/pypy-env/bin$ ./pip install --verbose Pygments django-reversion django-dbtemplates django-tagging South
Alles für PyLucid installiert, bis auf den Feedparser. Ohne geht's erstmal auch ;)

Code: Alles auswählen

# PyLucid Skripte symlinken:
(pypy-env)~/pypy-env/bin$ cd ..
(pypy-env)~/pypy-env$ ln src/pylucid/scripts/create_page_instance.sh .

# page instance erstellen
(pypy-env)~/pypy-env$ ./create_page_instance.sh ~/pypy_page/
Dann mal mit SQLite probieren (ist default bei create_page_instance.sh):

Code: Alles auswählen

(pypy-env)~/pypy-env/bin$ cd ~/pypy_page/
(pypy-env)~/pypy_page$ ./manage.py syncdb
Dabei tauchen viele Warnings von SQLite auf, wie:

Code: Alles auswählen

/home/jens/pypy-c-jit-43780-b590cf6de419-linux64/lib_pypy/_sqlite3.py:1031: RuntimeWarning: C function without declared arguments called
  sqlite.sqlite3_finalize(self.statement)
/home/jens/pypy-c-jit-43780-b590cf6de419-linux64/lib_pypy/_sqlite3.py:1031: RuntimeWarning: C function without declared return type called
  sqlite.sqlite3_finalize(self.statement)
Mal weiter machen:

Code: Alles auswählen

(pypy-env)~/pypy_page$ ./manage.py migrate
(pypy-env)~/pypy_page$ ./manage.py loaddata pylucid.json
Das sieht nicht gut aus, denn es kommen viele Warings, aber nicht die zu erwarteten Ausgaben, wie:

Code: Alles auswählen

Installing json fixture 'pylucid' from 'PyLucid_env/src/pylucid/pylucid_project/apps/pylucid_admin/fixtures'.
Installed 159 object(s) from 1 fixture(s)
Der Developer Server mal starten und nachsehen:

Code: Alles auswählen

./manage.py runserver
Sieht gut aus. Seite läuft... ;)


Ein kleines Problem ist schon gefixed: https://github.com/jedie/django-tools/c ... 4ddd6f8de8
sys.getsizeof(instance) wirft TypeError: sys.getsizeof() not implemented on PyPy, wobei ich nur AttributeError abgefangen hab... :lol:


Die unittests laufen eine ganze weile durch, dann gibt es aber einen Speicherzugriffsfehler.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Was mich nach wie vor zurückhält ist mangelnder numpy-Support. Bislang gab es viele Ankündigungen (u. a. vor rund zwei Jahren in Leipzig), aber nichts was über den experimentellen Status hinaus geht (oder?).

Und ich glaube ich bin nicht alleine mit meiner Einschätzung, daß insb. der wissenschaftliche Teil der Community stark auf PyPy mit numpy schielt.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@jens: Das Feedparser-Installieren dauert glaube ich so lange, weil das Auspacken so lange dauert -- PyPy 1.5 ist ganz grottig im GZip/BZip-Auspacken. Ist aber in 1.6 gefixt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Das könnte sein. Leider bekommt man mit --verbose keine Statusmeldung (wie so oft bei Linux cli Dingen :( )

Ich versuche gerade PyPy auf einem Server zu testen. Dort hab ich keinen root zugriff und nur ein virtualenv v1.4.9 Laut http://doc.pypy.org/en/latest/getting-s ... virtualenv benötigt man aber v1.6.1...

Ich hab mal folgendes Probiert:

Code: Alles auswählen

~$ virtualenv --version
1.4.9
~$ virtualenv virtualenv2 --no-site-packages
~$ cd virtualenv2/bin/
~$ virtualenv2/bin$ source activate
(virtualenv2)virtualenv2/bin$ pip install --upgrade pip virtualenv
(virtualenv2)virtualenv2/bin$ cd ~
(virtualenv2)~$ virtualenv --version
1.6.4
(virtualenv2)~$ wget https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-linux64.tar.bz2
(virtualenv2)~$ tar xf pypy-1.5-linux64.tar.bz2
(virtualenv2)~$ virtualenv --no-site-packages -p pypy-c-jit-43780-b590cf6de419-linux64/bin/pypy pypy-env
Running virtualenv with interpreter pypy-c-jit-43780-b590cf6de419-linux64/bin/pypy
pypy-c-jit-43780-b590cf6de419-linux64/bin/pypy: error while loading shared libraries: libffi.so.5: cannot open shared object file: No such file or directory
Klappt so also nicht. Obwohl prinzipell das schon fuktioniert:

Code: Alles auswählen

(virtualenv2)~$ virtualenv --no-site-package pypy-env 
Using real prefix '/usr'
New python executable in pypy-env/bin/python
Installing setuptools............done.
Installing pip...............done.

...

Es ist hat nichts mit virtualenv zu tun... Das starten von PyPy klappt generell nicht, kommt nur der Fehler:

Code: Alles auswählen

./pypy: error while loading shared libraries: libffi.so.5: cannot open shared object file: No such file or directory

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, ist halt gegen eine andere Version von libFFI gelinkt, musst also entweder ein passendes Build installieren oder deine eigene libffi.so.5 bereitstellen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie man PyPy mittels virtualenv ausprobieren kann, hab ich mal ins Wiki übertragen: http://wiki.python.de/PyPy#PyPy_Ausprobieren

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:Es soll aber http://code.google.com/p/pymysql/ (pure Python MySQL client) funktionieren, siehe: http://groups.google.com/group/django-u ... d014c1ad9/
Schon jemand Probiert?
Gerade gibt es ein "proposal" um PyMySQL in Django zu Unterstützen: https://groups.google.com/group/django- ... 1959c9e5be

Dann könnte man IMHO PyPy auch mit Django + MySQL nutzten... Wäre nett...

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