Re: Python without wrapper script
On Dec 2, 4:12 pm, Ulrich Eckhardt eckha...@satorlaser.com wrote: eric.frederich wrote: Is there a way to set up environment variables in python itself without having a wrapper script. Yes, sure, you can set environment variables... The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py ...but this won't work, I'm afraid. LD_LIBRARY_PATH is for the program loader / dynamic linker under Linux. This thing is what is invoked _before_ the program is started, any later modifications to the environment are ignored. Similarly PATH, which tells the shell (e.g. bash) where to find executables. If you need that to e.g. find 'python' itself, you're out of luck. Otherwise, I believe Python itself doesn't use PATH, so you could set it inside and any shells started from Python should pick it up. Uli -- Sator Laser GmbH Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932 I have had success in modifying LD_LIBRARY_PATH from within my Python code, to make sure that Python correctly loads DLL's from subdirectories of my project. (I believe the Python ended up calling CDll, or somesuch?) -- http://mail.python.org/mailman/listinfo/python-list
Re: Python without wrapper script
On Dec 3, 3:13 pm, Jonathan Hartley tart...@tartley.com wrote: On Dec 2, 4:12 pm, Ulrich Eckhardt eckha...@satorlaser.com wrote: eric.frederich wrote: Is there a way to set up environment variables in python itself without having a wrapper script. Yes, sure, you can set environment variables... The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py ...but this won't work, I'm afraid. LD_LIBRARY_PATH is for the program loader / dynamic linker under Linux. This thing is what is invoked _before_ the program is started, any later modifications to the environment are ignored. Similarly PATH, which tells the shell (e.g. bash) where to find executables. If you need that to e.g. find 'python' itself, you're out of luck. Otherwise, I believe Python itself doesn't use PATH, so you could set it inside and any shells started from Python should pick it up. Uli -- Sator Laser GmbH Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932 I have had success in modifying LD_LIBRARY_PATH from within my Python code, to make sure that Python correctly loads DLL's from subdirectories of my project. (I believe the Python ended up calling CDll, or somesuch?) Ahar! But of course, I was modifying os.environ, not setting the actual environment. I see. -- http://mail.python.org/mailman/listinfo/python-list
Python without wrapper script
Is there a way to set up environment variables in python itself without having a wrapper script. The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py -- http://mail.python.org/mailman/listinfo/python-list
Re: Python without wrapper script
eric.frederich wrote: Is there a way to set up environment variables in python itself without having a wrapper script. Yes, sure, you can set environment variables... The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py ...but this won't work, I'm afraid. LD_LIBRARY_PATH is for the program loader / dynamic linker under Linux. This thing is what is invoked _before_ the program is started, any later modifications to the environment are ignored. Similarly PATH, which tells the shell (e.g. bash) where to find executables. If you need that to e.g. find 'python' itself, you're out of luck. Otherwise, I believe Python itself doesn't use PATH, so you could set it inside and any shells started from Python should pick it up. Uli -- Sator Laser GmbH Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932 -- http://mail.python.org/mailman/listinfo/python-list
Re: Python without wrapper script
eric.frederich wrote: Is there a way to set up environment variables in python itself without having a wrapper script. The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py try in someScript.py os.environ['PATH'] = /some/thing/bin:+ os.environ['PATH'] example: import subprocess import os p = subprocess.Popen('/bin/echo $TEST', shell=True, stdout=subprocess.PIPE ) p.communicate()[0] '\n' os.environ['TEST'] = 'hello' p = subprocess.Popen('/bin/echo $TEST', shell=True, stdout=subprocess.PIPE ) p.communicate()[0] 'hello\n' JM -- http://mail.python.org/mailman/listinfo/python-list
Re: Python without wrapper script
Ulrich Eckhardt wrote: eric.frederich wrote: Is there a way to set up environment variables in python itself without having a wrapper script. Yes, sure, you can set environment variables... The wrapper script is now something like #!/bin/bash export LD_LIBRARY_PATH=/some/thing/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/another/thing/lib:$LD_LIBRARY_PATH export PATH=/some/thing/bin:$PATH export PATH=/another/thing/bin:$PATH python ./someScript.py ...but this won't work, I'm afraid. LD_LIBRARY_PATH is for the program loader / dynamic linker under Linux. This thing is what is invoked _before_ the program is started, any later modifications to the environment are ignored. In cases like yours I have sometimes written Python scripts that acted as their own wrapper: #!/usr/bin/env python import os, sys if 'LD_LIBRARY_PATH' in os.environ: lib_path = os.environ['LD_LIBRARY_PATH'] if '/some/thing/lib' in lib_path and '/another/thing/lib' in lib_path: pass else: os.environ['LD_LIBRARY_PATH'] += ':/some/thing/lib:/another/thing/lib' os.execve(sys.argv[0], sys.argv, os.environ) else: os.environ['LD_LIBRARY_PATH'] = '/some/thing/lib:/another/thing/lib' os.execve(sys.argv[0], sys.argv, os.environ) os.environ['PATH'] = '/some/thing/bin:/another/thing/bin:' + os.environ['PATH'] # At this point, you can import a module that depends # on LD_LIBRARY_PATH including /some/thing/lib # # Alternatively (and more clearly), you can replace the 'pass' above # by that import statement This code restarts Python if it has to modify os.environ['LD_LIBRARY_PATH']. If you try to single-step this code under pdb, you'll get as far as the os.execve() call. That call starts Python afresh, without a debugger. In other words, if you need to use pdb, you'll have to set the environment variables in the shell. Similarly PATH, which tells the shell (e.g. bash) where to find executables. If you need that to e.g. find 'python' itself, you're out of luck. Otherwise, I believe Python itself doesn't use PATH, so you could set it inside and any shells started from Python should pick it up. You don't have to restart Python if you modify to os.environ['PATH'], so that bit is easy. Hope this helps, -- HansM -- http://mail.python.org/mailman/listinfo/python-list