Newbie thwarted by sys.path on Vista

3 views
Skip to first unread message

Michael M Mason

unread,
Aug 1, 2009, 5:58:53 PM8/1/09
to
I'm running Python 3.1 on Vista and I can't figure out how to add my own
directory to sys.path.

The docs suggest that I can either add it to the PYTHONPATH environment
variable or to the PythonPath key in the registry. However, PYTHONPATH
doesn't exist, and updating the registry key has no effect (and in any case
the contents aren't the same as sys.path).

So where does sys.path get its value from, and how do I change it?

--
Michael

Jon Clements

unread,
Aug 1, 2009, 7:32:21 PM8/1/09
to

sys.path is just a list. So in your 'main' module where you do most of
your imports, just append or prepend the path you desire (the search
order is left to right). Although, I believe under Windows creating a
system level or user level PYTHONPATH environment variable will enable
Windows to pick it up. Not 100% sure as I don't have a Windows machine
handy.

Piet van Oostrum

unread,
Aug 1, 2009, 7:36:18 PM8/1/09
to
>>>>> "Michael M Mason" <mic...@altra-optics.co.uk> (MMM) wrote:

>MMM> I'm running Python 3.1 on Vista and I can't figure out how to add my own
>MMM> directory to sys.path.

>MMM> The docs suggest that I can either add it to the PYTHONPATH environment
>MMM> variable or to the PythonPath key in the registry. However, PYTHONPATH
>MMM> doesn't exist,

Then create it.
--
Piet van Oostrum <pi...@cs.uu.nl>
URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4]
Private email: pi...@vanoostrum.org

Dave Angel

unread,
Aug 1, 2009, 8:29:12 PM8/1/09
to Michael M Mason, pytho...@python.org
Michael M Mason wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">I'm
sys.path gets its values from several places. The ones I think I know
of are:

current directory (which uses "" rather than the expected ".")
directories listed in PythonPath environment variable
Windows-system directory
relative to the executable (python.exe or pythonw.exe) that's
actually running
relative to the user directory (docs&settings/username/Application
Data ....

If there's no PythonPath variable, it just uses those other items. I
have no idea what it gets from the registry entries.

Anyway, I'd suggest adding it to PythonPath, and if it's empty, just
create it with the directory you need.

I'm hoping you know you can also add to sys.path directly during script
initialization. It's just a list, and is writeable.

David Lyon

unread,
Aug 1, 2009, 8:26:19 PM8/1/09
to Michael M Mason, pytho...@python.org
On Sat, 1 Aug 2009 22:58:53 +0100, "Michael M Mason"
<mic...@altra-optics.co.uk> wrote:
> I'm running Python 3.1 on Vista and I can't figure out how to add my own
> directory to sys.path.
>
> The docs suggest that I can either add it to the PYTHONPATH environment
> variable or to the PythonPath key in the registry. However, PYTHONPATH
> doesn't exist, and updating the registry key has no effect
>
> So where does sys.path get its value from, and how do I change it?

The simplest hack (worst - but most direct) is that sys.path is a list
and you can use it like any other list. (add, delete, change items in it)

It gets loaded from site.py (in the standardard library) at startup.

Anything else you'll have to ask somebody else.

David

Michael M Mason

unread,
Aug 2, 2009, 2:34:56 AM8/2/09
to

"Dave Angel" <da...@ieee.org> wrote in message
news:mailman.4120.1249172...@python.org...

> Michael M Mason wrote:
>> <div class="moz-text-flowed" style="font-family: -moz-fixed">I'm running
>> Python 3.1 on Vista and I can't figure out how to add my own directory to
>> sys.path.

Thanks to Jon, Piet, David and Dave for the responses.

> sys.path gets its values from several places.

Ah, I'd misunderstood the docs: I thought it came from just one place (which
I couldn't find).

> Anyway, I'd suggest adding it to PythonPath, and if it's empty, just
> create it with the directory you need.

Thanks--that worked!

> I'm hoping you know you can also add to sys.path directly during script
> initialization. It's just a list, and is writeable.

Yes, but I'm mainly playing in IDLE and I was getting a bit fed up of
repeatedly typing
import sys
sys.path.append('C:/Users/Michael/Code/Python')
import mystuff

--
Michael


Mark Lawrence

unread,
Aug 2, 2009, 4:55:04 AM8/2/09
to pytho...@python.org
Michael M Mason wrote:
>
> "Dave Angel" <da...@ieee.org> wrote in message
> news:mailman.4120.1249172...@python.org...
>> Michael M Mason wrote:
>>> <div class="moz-text-flowed" style="font-family: -moz-fixed">I'm
>>> running Python 3.1 on Vista and I can't figure out how to add my own
>>> directory to sys.path.
>
> Thanks to Jon, Piet, David and Dave for the responses.
>
>> sys.path gets its values from several places.
>
> Ah, I'd misunderstood the docs: I thought it came from just one place
> (which I couldn't find).
>
>> Anyway, I'd suggest adding it to PythonPath, and if it's empty, just
>> create it with the directory you need.
>
> Thanks--that worked!
Be careful, I'm screwed things up on several occasions by placing a file
on PYTHONPATH that overrides a file in the standard library, test.py
being my favourite!

>
>> I'm hoping you know you can also add to sys.path directly during
>> script initialization. It's just a list, and is writeable.
>
> Yes, but I'm mainly playing in IDLE and I was getting a bit fed up of
> repeatedly typing
> import sys
> sys.path.append('C:/Users/Michael/Code/Python')
> import mystuff
>
--
Kindest regards.

Mark Lawrence.

Michael M Mason

unread,
Aug 2, 2009, 5:15:25 AM8/2/09
to
"Mark Lawrence" <bream...@yahoo.co.uk> wrote in message
news:mailman.4130.1249203...@python.org...

> Be careful, I'm screwed things up on several occasions by placing a file
> on PYTHONPATH that overrides a file in the standard library, test.py being
> my favourite!

Thanks. Sure enough, I've already got my own test.py but I hadn't
discovered it was a problem yet...

--
Michael

Mark Lawrence

unread,
Aug 2, 2009, 7:04:25 AM8/2/09
to pytho...@python.org
Typical, tried to reproduce it and can't! Still at least you've been
warned.

Christian Heimes

unread,
Aug 2, 2009, 9:08:25 AM8/2/09
to pytho...@python.org

You can use my PEP 370 (http://python.org/dev/peps/pep-0370/) and a .pth
file to extend the search path for modules.

>>> import os
>>> import site
>>> site.USER_SITE
'/home/heimes/.local/lib/python2.6/site-packages'
>>> if not os.path.isdir(site.USER_SITE):
... os.makedirs(site.USER_SITE)
...
>>> pth = open(os.path.join(site.USER_SITE, "michal.pth"), "w")
>>> pth.write("C:/Users/Michael/Code/Python\n")
>>> pth.close()

Restart Python, your custom search path should be in sys.path.

Christian

Reply all
Reply to author
Forward
0 new messages