470,614 Members | 1,412 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,614 developers. It's quick & easy.

PYTHONPATH

Hi,
I am using Linux env.I set the PYTHONPATH using

import sys
sys.path.append(----)

But we i close python and start again i is not showing my new entry in
PYTHONPATH.
Can anyone help me to make my path persistant?
Thanks

Apr 20 '06 #1
10 6282
su**************@gmail.com enlightened us with:
I am using Linux env.I set the PYTHONPATH using

import sys
sys.path.append(----)

But we i close python and start again i is not showing my new entry in
PYTHONPATH.
Can anyone help me to make my path persistant?


Add the following to /etc/profile:

export PYTHONPATH="..."

Sybren
--
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself?
Frank Zappa
Apr 20 '06 #2
su**************@gmail.com wrote:
Hi,
I am using Linux env.I set the PYTHONPATH using

import sys
sys.path.append(----)
This does not sets the PYTHONPATH.

bruno@bousin ~/public_html/aquitaine-pqa $ python -h
(snip)
Other environment variables:
(snip)
PYTHONPATH : ':'-separated list of directories prefixed to the
default module search path. The result is sys.path.
(snip)

That is : it's the PYTHONPATH environnement variable that is used - if
defined - to set sys.path - not the other way round
But we i close python and start again i is not showing my new entry in
PYTHONPATH.
Of course.
Can anyone help me to make my path persistant?


Just like any other environnement variable on your system. With most
distros, it will be something like adding the line:

export PYTHONPATH="/a/possible/path;/another/one;/and/a/third"

either in /etc/profile (will be system-wide default) or ~/.bash_profile
(will be user-specific).

but this may vary according to your distro and your shell.
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'o****@xiludom.gro'.split('@')])"
Apr 20 '06 #3
bruno at modulix said unto the world upon 20/04/06 08:38 AM:

<snip>
Can anyone help me to make my path persistant?

Just like any other environnement variable on your system. With most
distros, it will be something like adding the line:

export PYTHONPATH="/a/possible/path;/another/one;/and/a/third"

either in /etc/profile (will be system-wide default) or ~/.bash_profile
(will be user-specific).

but this may vary according to your distro and your shell.

Hi all,

reraising a slightly stale thread as I've got the same issue.

I'm a fairly recently convert to ubuntu from Windows and I'm still at
the stage where I am most comfortable with things right there for the
clicking, but I'm learning ;-)

The suggestions above appear not to work for me:

brian@Cedric:~/PythonFiles$ pwd
/home/brian/PythonFiles
brian@Cedric:~/PythonFiles$ cd ~
brian@Cedric:~$ cat /etc/profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"
brian@Cedric:~$ cat .bash_profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"
brian@Cedric:~$ python
Python 2.4.2 (#2, Sep 30 2005, 21:19:01)
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
from sys import path
for p in path: .... if "PythonFiles" in p or "Numeric" in p:
.... print p
....
/usr/lib/python2.4/site-packages/Numeric


(I don't think it should matter, but I also tried the export line with
"/home/brian" in place of "~" in both files. I also tried with a ';'
trailing the single entry in my attempted PYTHONPATHs.)

I don't know where to look for more information; I'm assuming that
ubuntu isn't doing it the standard way bruno referred to above. Could
some ubuntu user cast light, please?

Thanks and best,

Brian vdB

Apr 23 '06 #4
Brian van den Broek wrote:
The suggestions above appear not to work for me:

brian@Cedric:~$ cat /etc/profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"
brian@Cedric:~$ cat .bash_profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"
Those files are only read when you start the shell. I'm guessing you made
those changes from the currently running shell. To fix it you have 3 choices:
1. Close the shell and start a new one
2. Type 'bash -l' at the prompt to invoke a new login shell
3. Type '. .bash_profile' to read the changes into your current shell
(I don't think it should matter, but I also tried the export line with
"/home/brian" in place of "~" in both files.
Nope doesn't matter, as long as 'echo $HOME' is /home/brian.
I don't know where to look for more information; I'm assuming that
ubuntu isn't doing it the standard way bruno referred to above. Could
some ubuntu user cast light, please?


This information bruno gave is correct. It's not an ubuntu issue, it's the
way unix shells are designed to work. It's generally udnerstood that
changing environment variables in a profile requires forcing the shell to
reprocess them in one of the ways above. You can also type 'export
"VAR=value"' to set a variable in the current bash shell (but it's value
will be lost when the shell exits).

You might want to google for "bash shell tutorial" and familiarize yourself
with how bash shells work. It can be somewhat confusing at first, but it's
a very powerful way to interact with your system.
Apr 23 '06 #5
Edward Elliott said unto the world upon 23/04/06 04:28 PM:
Brian van den Broek wrote:
The suggestions above appear not to work for me:

brian@Cedric:~$ cat /etc/profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"
brian@Cedric:~$ cat .bash_profile | grep 'export PYTHONPATH'
export PYTHONPATH="~/PythonFiles"

Those files are only read when you start the shell. I'm guessing you made
those changes from the currently running shell. To fix it you have 3 choices:
1. Close the shell and start a new one
2. Type 'bash -l' at the prompt to invoke a new login shell
3. Type '. .bash_profile' to read the changes into your current shell


Edward,

thanks for the reply. I'm going to not worry about exposing my
ignorance in what follows :-)

I ought to have specified that I did indeed think to invoke a new
shell after I made the changes. However, trying (2) and (3) as you
specified shed some light.

Early on, (probably miss-)following something I read on the net, I'd put
a block into my .bash_profile that read:

if 1; then
somestuff

Trying (3) gave
brian@Cedric:~$ . .bash_profile
bash: 1: command not found

Commenting out the bad block in .bash_profile, if I open a shell and
things are somewhat better.

Only somewhat, as if I open a brand new shell:

brian@Cedric:~$ python
Python 2.4.2 (#2, Sep 30 2005, 21:19:01)
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
from sys import path
path[0:3] ['', '/usr/lib/python24.zip', '/usr/lib/python2.4'] brian@Cedric:~$ . .bash_profile
brian@Cedric:~$ python
Python 2.4.2 (#2, Sep 30 2005, 21:19:01)
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
Type "help", "copyright", "credits" or "license" for more information. from sys import path
path[0:3] ['', '/home/brian/PythonFiles', '/usr/lib/python24.zip']


So, it seems that I currently have to invoke '. .bash_profile'
manually with each new shell opened for this to have effect. (Trained
by Bill, I even rebooted to be sure that the invocation of
'. .bash_profile' is needed.)
But, still it is closer :-)

I still haven't managed to coerce lines in /etc/profile exporting
PYTHONPATH to have an effect.

<snip>
I don't know where to look for more information; I'm assuming that
ubuntu isn't doing it the standard way bruno referred to above. Could
some ubuntu user cast light, please?

This information bruno gave is correct.


I didn't mean to suggest bruno was wrong, but instead that perhaps
ubuntu was a distro falling under his phrase:
but this may vary according to your distro and your shell
such that the instructions he gave would not work without
modification. Apologies if I gave a different impression.

<snip>

You might want to google for "bash shell tutorial" and familiarize yourself
with how bash shells work. It can be somewhat confusing at first, but it's
a very powerful way to interact with your system.


Thanks for the suggestions. With luck, I'll get the remaining issue
sorted. Thanks for the help,

Brian vdB

Apr 23 '06 #6
Brian van den Broek wrote:
if 1; then
somestuff

Trying (3) gave
brian@Cedric:~$ . .bash_profile
bash: 1: command not found
The error indicates the shell tried to execute a program named '1' and
couldn't find one. Arthimetic expressions generally have to be wrapped in
(()) in bash:

if ((1)); then
stuff

Conditional expressions use [[ ]] (the spaces inside the brackets matter).
So ((0)) is false while [[ 0 ]] is true. Yes the difference is screwy
and it sucks. Since ((1)) is always true, you could leave out the if line
altogether, but I'm guessing that 'stuff' is multiple lines that want to
toggle on and off.

Only somewhat, as if I open a brand new shell:

brian@Cedric:~$ python
>>> from sys import path
>>> path[0:3]
['', '/usr/lib/python24.zip', '/usr/lib/python2.4']


You realize this only prints the first 3 elements of path, right?
So, it seems that I currently have to invoke '. .bash_profile'
manually with each new shell opened for this to have effect.
Your shell must not be opening as a login shell. From the bash man page:

"When bash is invoked as an interactive login shell, or as a
non-interactive shell with the --login option, it first reads and executes
commands from the file /etc/profile, if that file exists. After reading
that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in
that order, and reads and executes commands from the first one that exists
and is readable...

"When an interactive shell that is not a login shell is started, bash
reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if
these files exist."

I don't like differences between my interactive and login shell, so I
usually just link .bashrc to .bash_profile. You can do that with this
command (from your home dir):

ln .bash_profile .bashrc

(assuming .bashrc doesn't exist, if so remove it first). This makes
..bashrc the same file as .bash_profile, either name accesses the same contents.

Another option is to invoke one from the other with the . command. I.e.
put the line '. .bashrc' somewhere in .bash_profile and then move all the
common commands (like PYTHONPATH=) to .bashrc.

You shouldn't mess with /etc/profile for personal settings. That's what
..profile/.bashrc are for. /etc is for system-wide settings that apply to
all users on the system (including system processes, which you probably
don't want to affect).

(Trained by Bill, I even rebooted to be sure that the invocation of
'. .bash_profile' is needed.)
Rebooting is something you almost never need to do in linux unless you're
installing new hardware or a new kernel. It won't affect the operation of
bash in any way. That said, rebooting won't hurt either if you don't know
how to manually restart an affected process or daemon.

I still haven't managed to coerce lines in /etc/profile exporting
PYTHONPATH to have an effect.
As I said, must not be a login shell (see above).

I didn't mean to suggest bruno was wrong, but instead that perhaps
ubuntu was a distro falling ... such that the instructions he gave
would not work without modification. Apologies if I gave a different
impression.


Yes I got that. When you do need ubuntu-specific help, you can try the
forums on

http://ubuntuforums.org/

I don't think you'll need that for any Python-related questions though
(other than installing python packages with apt-get).
Apr 24 '06 #7
Edward Elliott said unto the world upon 23/04/06 07:56 PM:
Brian van den Broek wrote:
<snip>
Only somewhat, as if I open a brand new shell:

brian@Cedric:~$ python
>>> from sys import path
>>> path[0:3]

['', '/usr/lib/python24.zip', '/usr/lib/python2.4']

You realize this only prints the first 3 elements of path, right?


Indeed :-) As the desired new path elements after running
'. .bash_profile' were inserted starting at path[1], I did this to cut
down on the size of the screen dump.
So, it seems that I currently have to invoke '. .bash_profile'
manually with each new shell opened for this to have effect.

Your shell must not be opening as a login shell. From the bash man page:


<snip'ed many helpful things>
When you do need ubuntu-specific help, you can try the
forums on

http://ubuntuforums.org/

I don't think you'll need that for any Python-related questions though
(other than installing python packages with apt-get).


Thanks again, Edward. If the information you've given me doesn't get
me sorted out, I will try with the ubuntu folk.

Best,

Brian vdB
Apr 24 '06 #8
Hi all,

As a fairly new linux user running ubuntu 5.10 I'd had problems
persistently setting my PYTHONPATH environment variable. bruno and
Edward got me most of the way (thanks!); I'm posting what worked for
future googling.

bruno at modulix said unto the world upon 20/04/06 08:38 AM:
Can anyone help me to make my path persistant?

Just like any other environnement variable on your system. With most
distros, it will be something like adding the line:

export PYTHONPATH="/a/possible/path;/another/one;/and/a/third"

either in /etc/profile (will be system-wide default) or ~/.bash_profile
(will be user-specific).


and
Edward Elliott said unto the world upon 23/04/06 07:56 PM: Brian van den Broek wrote:
<snip>
So, it seems that I currently have to invoke '. .bash_profile'
manually with each new shell opened for this to have effect.

Your shell must not be opening as a login shell. From the bash man page:


<snip>
"When an interactive shell that is not a login shell is started, bash
reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if
these files exist."


So, to get the terminal ubuntu launches when you click on the panel's
terminal icon to have a customized PYTHONPATH, one must, as Edward
said, modify ~/.bashrc or link it with ~/.bash_profile.

The syntax that worked for me was *almost* what bruno suggested. It
didn't work here until I used ':' rather than bruno's ';' as the path
element separator. So, the lines

PYTHONPATH="/home/brian/FirstDir:/home/brian/SecondDir"
export PYTHONPATH

added to ~.bashrc make the terminal launched from the panel icon
include /home/brian/FirstDir and /home/brian/SecondDir right after pwd
in sys.path as desired.

Thanks Edward and bruno!

Best,

Brian vdB
Apr 24 '06 #9
Brian van den Broek wrote:
It
didn't work here until I used ':' rather than ';' as the path
element separator.


Sorry, I missed the semi-colon before. Yes, unix uses colon to separate
path elements. Glad you figured it out and got it working.

FYI you can type 'man <command>' at the shell to get information about most
command-line programs (and a number of other things). That's where the
bash man page snippet I posted came from. Just in case you don't already
know.

Apr 24 '06 #10
Brian van den Broek wrote:
Hi all,

As a fairly new linux user running ubuntu 5.10 I'd had problems
persistently setting my PYTHONPATH environment variable. bruno and
Edward got me most of the way (thanks!); I'm posting what worked for
future googling.
(snip) The syntax that worked for me was *almost* what bruno suggested. It
didn't work here until I used ':' rather than bruno's ';' as the path
element separator.


oops, my bad :(
Sorry for the typo - it's of course ':'.

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'o****@xiludom.gro'.split('@')])"
Apr 25 '06 #11

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by Rami A. Kishek | last post: by
2 posts views Thread by Eric Wichterich | last post: by
4 posts views Thread by r.e.s. | last post: by
8 posts views Thread by Tero Pihlajakoski | last post: by
3 posts views Thread by D Denholm | last post: by
reply views Thread by Michael Yanowitz | last post: by
4 posts views Thread by mhearne808[insert-at-sign-here]gmail[insert-dot-he | last post: by
1 post views Thread by Aljosa Mohorovic | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.