PYTHONPATH

Edward Elliott nobody at 127.0.0.1
Sun Apr 23 20:56:49 EDT 2006


Brian van den Broek wrote:
> if 1; then
>     somestuff
>
> Trying (3) gave
> brian at 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 at 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).



More information about the Python-list mailing list