> Date: Fri, 8 Apr 2011 14:02:00 -0700
> From: James Fort <[email protected]>
> Subject: [SEAPY] Execute script from anywhere?
> To: Seattle Python Interest Group <[email protected]>
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hello SeaPIG,
>
> I wonder if anyone knows how to address the following issue.  I looked in a
> book and Googled for a while and couldn't find what I'm looking for.
>
> I want to have a directory or set of directories that contain Python scripts
> which I can execute from anywhere in my file system.  Right now, I'm
> concerned with Windows XP, but I may want to do the same in Mac OSX and
> Linux in the future.  Essentially, I want to by able to type:
>
> currentDir>>>python script.py arg1 arg2
>
> Where arg1 and arg2 might be files in the current directory that act as
> inputs to the script and script.py is a script that resides in another
> directory.
>
> Here are some ideas I considered:
>
>   - Setting the PYTHONPATH variable to include a directory where script.py
>   is stored.  This did not work.  It seems to only work for importing
>   modules once the Python interpreter is already invoked.
>   - I read online and in a book that you can set "#!/usr/bin/python" as the
>   first line in a script, assuming that this is the full path to the
>   interpreter, put the script in /usr/bin or any other directory to which PATH
>   points, and run the script using ">>>script.py".  I read that this is
>   only an option in Unix, however, and it doesn't allow me to specify the
>   version of Python I want to use as would be possible if I prefixed the
>   script submission command with ">>>python26 script.py".  This also
>   precludes me from using ">>>run script.py" from within Ipython.
>
> Does anyone know how to handle this?  I noticed that I run the same script
> by copying the script into the directories in which I want to run it, but
> when I make revisions to the script, I have different versions sitting in
> different directories, which is becoming very difficult to manage.
>
> Thanks,
>
> James

I'm probably missing something about what you want to do that makes
this not the right answer, but why not just put the scripts in a
package in your site-packages directory?  Then run python -m
<package-name>.<script-name>.  For example, in my site-packages
directory I have a directory utils with an empty file in it called
__init__.py (this is all you need to make a directory a package);
inside utils I have a little script I wrote, ssg.py. to test Python's
tkinter on my XP computer; if I open a command prompt in, say, My
Documents, and type "python -m utils.ssg", it runs just fine.  (Note
that this approach makes your scripts not only available from the
command line anywhere on your file system, it also makes them
available to import into your any of your scripts, anywhere; indeed,
that's why this works, 'cause basically all the -m modifier does is,
quoting from http://docs.python.org/using/cmdline.html, "When [python
is] called with -m module-name, the given module is located on the
Python module path [customarily %Pythonpath%\Lib\site-packages] and
executed as a script").  (Thanks is owed to SeaPIG members Mike Orr
and Chris Barker for teaching me the elements of this approach; also,
I'm still using 2.6: the <package-name>.<script-name> syntax may need
to be modified if you're running an earlier/later version of Python.)

HTH,
DG

Reply via email to