Christopher Arndt | 1 Feb 16:27
Picon
Favicon
Gravatar

Re: Problem mit fork() in der C-API

On 31.01.2012 14:33, Christian Heimes wrote:
> Am 31.01.2012 14:24, schrieb Olе Streicher:
>> Hallo Gruppe,
>>
>> ich habe einen C-Code an Python mit der C-API angebunden, der u.a. einen
>> fork() mit einem exit() macht.
> 
> Wenn du selbst einen Fork machst, musst du auch die passenden Hooks
> verwenden.

Interessantes Phänomen. Ich vermute mal, das Problem hat eher mit
vererbten Filepointern im Zusammenspiel mit Pythons Fileobjekten zu tun.
In der fork Manpage stehen ja ein paar Dinge, die Child-Prozesse nicht
erben. Ich würde mal in den Python-Sourcen schauen, ob das Fileobjekt
evtl. davon betroffen ist.

> Warum ist das so und wie kann ich das verhindern?

Warum das so ist, weiß ich nicht, aber ein a.flush() direkt nach dem
a.write(..) stellt das erwartete Verhalten wieder her.

Chris
_______________________________________________
python-de maillist  -  python-de <at> python.org
http://mail.python.org/mailman/listinfo/python-de
Christopher Arndt | 1 Feb 17:48
Picon
Favicon
Gravatar

Re: Problem mit fork() in der C-API

On 01.02.2012 16:27, Christopher Arndt wrote:
> On 31.01.2012 14:33, Christian Heimes wrote:
>> Am 31.01.2012 14:24, schrieb Olе Streicher:
>> Warum ist das so und wie kann ich das verhindern?
> 
> Warum das so ist, weiß ich nicht, aber ein a.flush() direkt nach dem
> a.write(..) stellt das erwartete Verhalten wieder her.

Mit Python 3 (getestet mit 3.2.2) funktioniert es übriges, wie erwartet.
Siehe Py3-Version der Extension im Anhang.

Chris
Attachment (foo.c): text/x-csrc, 823 bytes
_______________________________________________
python-de maillist  -  python-de@...
http://mail.python.org/mailman/listinfo/python-de
Olе Streicher | 2 Feb 10:45
Picon

PYTHONPATH und sys.path

Hallo Gruppe,

Wenn ich folgendes Miniprogramm ausführe:
----------8<------
import sys
for p in sys.path:
    print p
----------8<------

ergibt sich mit

PYTHONPATH=/home/ole/some/where python ppath.py

folgendes:
------------------------8<----------------------------------------------
/home/ole/pythonsrc/
/usr/lib64/python2.6/site-packages/urwid-0.9.9.1-py2.6-linux-x86_64.egg
[...]
/home/ole/some/where
/usr/lib64/python26.zip
[...]
------------------------8<----------------------------------------------

d.h. mein vorgegebener PYTHONPATH ist nicht am Anfang, sondern dort sind
diverse site-packages. Das Verzeichnis, welches ppath.py enthält, ist
allerdings ganz am Anfang.

Wie bekomme ich meine eigenen Pakete vor die Site-Packages?

Ole
(Continue reading)

Christopher Arndt | 2 Feb 11:29
Picon
Favicon
Gravatar

Re: PYTHONPATH und sys.path

On 02.02.2012 10:45, Olе Streicher wrote:
> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?

Wozu? Wenn du verschiedene Versionen der gleichen Packages hast, die
miteinander in Konflikt geraten, verwende virtualenv. Und
virtualenvwrapper erleichtert den Umgang damit nochmal erheblich.

Chris
_______________________________________________
python-de maillist  -  python-de <at> python.org
http://mail.python.org/mailman/listinfo/python-de
Picon

Re: PYTHONPATH und sys.path

Hallo Ole.

Olе Streicher schrieb:
> d.h. mein vorgegebener PYTHONPATH ist nicht am Anfang, sondern dort sind
> diverse site-packages. Das Verzeichnis, welches ppath.py enthält, ist
> allerdings ganz am Anfang.
> 
> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?
Das geht zum Beipspiel mit folgendem Code:

ALLDIRS = ['usr/local/pythonenv/PYLONS-1/lib/python2.5/site-packages']

import sys
import site

# Remember original sys.path.
prev_sys_path = list(sys.path)

# Add each new site-packages directory.
for directory in ALLDIRS:
  site.addsitedir(directory)

# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
    if item not in prev_sys_path:
        new_sys_path.append(item)
        sys.path.remove(item)
sys.path[:0] = new_sys_path

(Continue reading)

Olе Streicher | 2 Feb 13:23
Picon

Re: PYTHONPATH und sys.path

Christopher Arndt <chris <at> chrisarndt.de> writes:
> On 02.02.2012 10:45, Olе Streicher wrote:
>> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?

> Wozu? Wenn du verschiedene Versionen der gleichen Packages hast, die
> miteinander in Konflikt geraten, verwende virtualenv. Und
> virtualenvwrapper erleichtert den Umgang damit nochmal erheblich.

Scheint mir aber deutlich komplizierter als ein

python setup.py build_ext -i
PYTHONPATH=`cwd` python test/UnitTests.py

zu sein. Zumal virtualenv ja nicht zu den "Batteries included" gehört
und man sich so für Testzwecke eine weitere Abhängigkeit ins Boot holt,
worüber nicht unbedingt jeder glücklich ist.

Warum funktioniert es denn mit dem PYTHONPATH nicht wie erwartet? 

Ole
_______________________________________________
python-de maillist  -  python-de <at> python.org
http://mail.python.org/mailman/listinfo/python-de
Olе Streicher | 2 Feb 13:24
Picon

Re: PYTHONPATH und sys.path

Markus Zapke-Gründemann <markuszapke@...> writes:
>> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?
> Das geht zum Beipspiel mit folgendem Code:
> ALLDIRS = ['usr/local/pythonenv/PYLONS-1/lib/python2.5/site-packages']

Nur passiert das innerhalb des Pythonprogramms und nicht (wie ich es
benötige) von der Shell aus.

Ole
_______________________________________________
python-de maillist  -  python-de@...
http://mail.python.org/mailman/listinfo/python-de

Picon

Re: PYTHONPATH und sys.path

Olе Streicher schrieb:
> Markus Zapke-Gründemann <markuszapke <at> gmx.net> writes:
>>> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?
>> Das geht zum Beipspiel mit folgendem Code:
>> ALLDIRS = ['usr/local/pythonenv/PYLONS-1/lib/python2.5/site-packages']
> 
> Nur passiert das innerhalb des Pythonprogramms und nicht (wie ich es
> benötige) von der Shell aus.
Dann würde ich dir auch, wie schon Christoph, zur Nutzung von virtualenv (und
virtualenvwrapper) raten. Ich finde deren Benutzung auch gar nicht kompliziert.

Oder suchst du vielleicht eher etwas wie setuptools "python setup.py develop"?

Viele Grüße

Markus
_______________________________________________
python-de maillist  -  python-de <at> python.org
http://mail.python.org/mailman/listinfo/python-de
Olе Streicher | 2 Feb 14:30
Picon

Re: PYTHONPATH und sys.path

Markus Zapke-Gründemann <markuszapke <at> gmx.net> writes:
> Olе Streicher schrieb:
>> Markus Zapke-Gründemann <markuszapke <at> gmx.net> writes:
>>>> Wie bekomme ich meine eigenen Pakete vor die Site-Packages?
>>> Das geht zum Beipspiel mit folgendem Code:
>>> ALLDIRS = ['usr/local/pythonenv/PYLONS-1/lib/python2.5/site-packages']
>> 
>> Nur passiert das innerhalb des Pythonprogramms und nicht (wie ich es
>> benötige) von der Shell aus.
> Dann würde ich dir auch, wie schon Christoph, zur Nutzung von
> virtualenv (und virtualenvwrapper) raten. Ich finde deren Benutzung
> auch gar nicht kompliziert.

Im Vergleich zum Setzen des PYTHONPATHs schon. Zumal es auch erst
installiert werden muss.

> Oder suchst du vielleicht eher etwas wie setuptools "python setup.py
> develop"?

Auch. Das Problem ist allerdings unabhängig davon -- ich hätte einfach
gerne einen in-situ-Test, bevor das Paket installiert wird, d.h. nach
einem build_ext -i, und ohne dass der geneigte Tester noch Zusatzpakete
heranziehen muss.

So richtig leuchtet mir nicht ein, warum PYTHONPATH nicht als erstes im
sys.path auftaucht -- was ist denn der Grund dafür?

Viele Grüße

Ole
(Continue reading)

Christian Heimes | 2 Feb 14:53
Picon
Favicon

Re: PYTHONPATH und sys.path

Am 02.02.2012 14:30, schrieb Olе Streicher:
> So richtig leuchtet mir nicht ein, warum PYTHONPATH nicht als erstes im
> sys.path auftaucht -- was ist denn der Grund dafür?

Die Behandlung der PTH-Dateien in den site-packages erfolgt nach der
Zusammenstellung von sys.path aus der Umgebung. PYTHONPATH verhält sich
leicht anders als eine Umgebung wie virtualenv, da über PYTHONPATH kein
site package erstellt wird. Siehe
http://docs.python.org/library/site.html#module-site

Virtualenv ist *die* empfohlene Lösung für dein Problem. Es steht dir
natürlich frei, die Empfehlung erfahrener Pythonentwickler und -benutzer
zu ignorieren ...

Christian

_______________________________________________
python-de maillist  -  python-de <at> python.org
http://mail.python.org/mailman/listinfo/python-de

Gmane