|
|
|
@ -17,9 +17,7 @@ How do I run a Python program under Windows? |
|
|
|
|
|
|
|
This is not necessarily a straightforward question. If you are already familiar |
|
|
|
with running programs from the Windows command line then everything will seem |
|
|
|
obvious; otherwise, you might need a little more guidance. There are also |
|
|
|
differences between Windows 95, 98, NT, ME, 2000 and XP which can add to the |
|
|
|
confusion. |
|
|
|
obvious; otherwise, you might need a little more guidance. |
|
|
|
|
|
|
|
.. sidebar:: |Python Development on XP|_ |
|
|
|
:subtitle: `Python Development on XP`_ |
|
|
|
@ -36,7 +34,7 @@ confusion. |
|
|
|
Unless you use some sort of integrated development environment, you will end up |
|
|
|
*typing* Windows commands into what is variously referred to as a "DOS window" |
|
|
|
or "Command prompt window". Usually you can create such a window from your |
|
|
|
Start menu; under Windows 2000 the menu selection is :menuselection:`Start --> |
|
|
|
Start menu; under Windows 7 the menu selection is :menuselection:`Start --> |
|
|
|
Programs --> Accessories --> Command Prompt`. You should be able to recognize |
|
|
|
when you have started such a window because you will see a Windows "command |
|
|
|
prompt", which usually looks like this:: |
|
|
|
@ -46,23 +44,27 @@ prompt", which usually looks like this:: |
|
|
|
The letter may be different, and there might be other things after it, so you |
|
|
|
might just as easily see something like:: |
|
|
|
|
|
|
|
D:\Steve\Projects\Python> |
|
|
|
D:\YourName\Projects\Python> |
|
|
|
|
|
|
|
depending on how your computer has been set up and what else you have recently |
|
|
|
done with it. Once you have started such a window, you are well on the way to |
|
|
|
running Python programs. |
|
|
|
|
|
|
|
You need to realize that your Python scripts have to be processed by another |
|
|
|
program called the Python interpreter. The interpreter reads your script, |
|
|
|
program called the Python *interpreter*. The interpreter reads your script, |
|
|
|
compiles it into bytecodes, and then executes the bytecodes to run your |
|
|
|
program. So, how do you arrange for the interpreter to handle your Python? |
|
|
|
|
|
|
|
First, you need to make sure that your command window recognises the word |
|
|
|
"python" as an instruction to start the interpreter. If you have opened a |
|
|
|
command window, you should try entering the command ``python`` and hitting |
|
|
|
return. You should then see something like:: |
|
|
|
return.:: |
|
|
|
|
|
|
|
Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win32 |
|
|
|
C:\Users\YourName> python |
|
|
|
|
|
|
|
You should then see something like:: |
|
|
|
|
|
|
|
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32 |
|
|
|
Type "help", "copyright", "credits" or "license" for more information. |
|
|
|
>>> |
|
|
|
|
|
|
|
@ -82,7 +84,7 @@ key down while you enter a Z, then hit the "Enter" key to get back to your |
|
|
|
Windows command prompt. |
|
|
|
|
|
|
|
You may also find that you have a Start-menu entry such as :menuselection:`Start |
|
|
|
--> Programs --> Python 2.2 --> Python (command line)` that results in you |
|
|
|
--> Programs --> Python 3.3 --> Python (command line)` that results in you |
|
|
|
seeing the ``>>>`` prompt in a new window. If so, the window will disappear |
|
|
|
after you enter the Ctrl-Z character; Windows is running a single "python" |
|
|
|
command in the window, and closes it when you terminate the interpreter. |
|
|
|
@ -90,8 +92,7 @@ command in the window, and closes it when you terminate the interpreter. |
|
|
|
If the ``python`` command, instead of displaying the interpreter prompt ``>>>``, |
|
|
|
gives you a message like:: |
|
|
|
|
|
|
|
'python' is not recognized as an internal or external command, |
|
|
|
operable program or batch file. |
|
|
|
'python' is not recognized as an internal or external command, operable program or batch file. |
|
|
|
|
|
|
|
.. sidebar:: |Adding Python to DOS Path|_ |
|
|
|
:subtitle: `Adding Python to DOS Path`_ |
|
|
|
@ -120,115 +121,33 @@ then the command :: |
|
|
|
dir C:\py* |
|
|
|
|
|
|
|
will probably tell you where it is installed; the usual location is something |
|
|
|
like ``C:\Python23``. Otherwise you will be reduced to a search of your whole |
|
|
|
like ``C:\Python33``. Otherwise you will be reduced to a search of your whole |
|
|
|
disk ... use :menuselection:`Tools --> Find` or hit the :guilabel:`Search` |
|
|
|
button and look for "python.exe". Supposing you discover that Python is |
|
|
|
installed in the ``C:\Python23`` directory (the default at the time of writing), |
|
|
|
installed in the ``C:\Python33`` directory (the default at the time of writing), |
|
|
|
you should make sure that entering the command :: |
|
|
|
|
|
|
|
c:\Python23\python |
|
|
|
c:\Python33\python |
|
|
|
|
|
|
|
starts up the interpreter as above (and don't forget you'll need a "CTRL-Z" and |
|
|
|
an "Enter" to get out of it). Once you have verified the directory, you need to |
|
|
|
add it to the start-up routines your computer goes through. For older versions |
|
|
|
of Windows the easiest way to do this is to edit the ``C:\AUTOEXEC.BAT`` |
|
|
|
file. You would want to add a line like the following to ``AUTOEXEC.BAT``:: |
|
|
|
|
|
|
|
PATH C:\Python23;%PATH% |
|
|
|
|
|
|
|
For Windows NT, 2000 and (I assume) XP, you will need to add a string such as :: |
|
|
|
|
|
|
|
;C:\Python23 |
|
|
|
|
|
|
|
to the current setting for the PATH environment variable, which you will find in |
|
|
|
the properties window of "My Computer" under the "Advanced" tab. Note that if |
|
|
|
you have sufficient privilege you might get a choice of installing the settings |
|
|
|
either for the Current User or for System. The latter is preferred if you want |
|
|
|
everybody to be able to run Python on the machine. |
|
|
|
|
|
|
|
If you aren't confident doing any of these manipulations yourself, ask for help! |
|
|
|
At this stage you may want to reboot your system to make absolutely sure the new |
|
|
|
setting has taken effect. You probably won't need to reboot for Windows NT, XP |
|
|
|
or 2000. You can also avoid it in earlier versions by editing the file |
|
|
|
``C:\WINDOWS\COMMAND\CMDINIT.BAT`` instead of ``AUTOEXEC.BAT``. |
|
|
|
|
|
|
|
You should now be able to start a new command window, enter ``python`` at the |
|
|
|
``C:\>`` (or whatever) prompt, and see the ``>>>`` prompt that indicates the |
|
|
|
Python interpreter is reading interactive commands. |
|
|
|
|
|
|
|
Let's suppose you have a program called ``pytest.py`` in directory |
|
|
|
``C:\Steve\Projects\Python``. A session to run that program might look like |
|
|
|
this:: |
|
|
|
|
|
|
|
C:\> cd \Steve\Projects\Python |
|
|
|
C:\Steve\Projects\Python> python pytest.py |
|
|
|
|
|
|
|
Because you added a file name to the command to start the interpreter, when it |
|
|
|
starts up it reads the Python script in the named file, compiles it, executes |
|
|
|
it, and terminates, so you see another ``C:\>`` prompt. You might also have |
|
|
|
entered :: |
|
|
|
|
|
|
|
C:\> python \Steve\Projects\Python\pytest.py |
|
|
|
|
|
|
|
if you hadn't wanted to change your current directory. |
|
|
|
|
|
|
|
Under NT, 2000 and XP you may well find that the installation process has also |
|
|
|
arranged that the command ``pytest.py`` (or, if the file isn't in the current |
|
|
|
directory, ``C:\Steve\Projects\Python\pytest.py``) will automatically recognize |
|
|
|
the ".py" extension and run the Python interpreter on the named file. Using this |
|
|
|
feature is fine, but *some* versions of Windows have bugs which mean that this |
|
|
|
form isn't exactly equivalent to using the interpreter explicitly, so be |
|
|
|
careful. |
|
|
|
|
|
|
|
The important things to remember are: |
|
|
|
|
|
|
|
1. Start Python from the Start Menu, or make sure the PATH is set correctly so |
|
|
|
Windows can find the Python interpreter. :: |
|
|
|
|
|
|
|
python |
|
|
|
|
|
|
|
should give you a '>>>' prompt from the Python interpreter. Don't forget the |
|
|
|
CTRL-Z and ENTER to terminate the interpreter (and, if you started the window |
|
|
|
from the Start Menu, make the window disappear). |
|
|
|
|
|
|
|
2. Once this works, you run programs with commands:: |
|
|
|
|
|
|
|
python {program-file} |
|
|
|
|
|
|
|
3. When you know the commands to use you can build Windows shortcuts to run the |
|
|
|
Python interpreter on any of your scripts, naming particular working |
|
|
|
directories, and adding them to your menus. Take a look at :: |
|
|
|
|
|
|
|
python --help |
|
|
|
|
|
|
|
if your needs are complex. |
|
|
|
|
|
|
|
4. Interactive mode (where you see the ``>>>`` prompt) is best used for checking |
|
|
|
that individual statements and expressions do what you think they will, and |
|
|
|
for developing code by experiment. |
|
|
|
an "Enter" to get out of it). Once you have verified the directory, you can |
|
|
|
add it to the system path to make it easier to start Python by just running |
|
|
|
the ``python`` command. This is currently an option in the installer as of |
|
|
|
CPython 3.3. |
|
|
|
|
|
|
|
More information about environment variables can be found on the |
|
|
|
:ref:`Using Python on Windows <setting-envvars>` page. |
|
|
|
|
|
|
|
How do I make Python scripts executable? |
|
|
|
---------------------------------------- |
|
|
|
|
|
|
|
On Windows 2000, the standard Python installer already associates the .py |
|
|
|
On Windows, the standard Python installer already associates the .py |
|
|
|
extension with a file type (Python.File) and gives that file type an open |
|
|
|
command that runs the interpreter (``D:\Program Files\Python\python.exe "%1" |
|
|
|
%*``). This is enough to make scripts executable from the command prompt as |
|
|
|
'foo.py'. If you'd rather be able to execute the script by simple typing 'foo' |
|
|
|
with no extension you need to add .py to the PATHEXT environment variable. |
|
|
|
|
|
|
|
On Windows NT, the steps taken by the installer as described above allow you to |
|
|
|
run a script with 'foo.py', but a longtime bug in the NT command processor |
|
|
|
prevents you from redirecting the input or output of any script executed in this |
|
|
|
way. This is often important. |
|
|
|
|
|
|
|
The incantation for making a Python script executable under WinNT is to give the |
|
|
|
file an extension of .cmd and add the following as the first line:: |
|
|
|
|
|
|
|
@setlocal enableextensions & python -x %~f0 %* & goto :EOF |
|
|
|
|
|
|
|
|
|
|
|
Why does Python sometimes take so long to start? |
|
|
|
------------------------------------------------ |
|
|
|
|
|
|
|
@ -246,22 +165,11 @@ McAfee, when configured to scan all file system read activity, is a particular |
|
|
|
offender. |
|
|
|
|
|
|
|
|
|
|
|
Where is Freeze for Windows? |
|
|
|
---------------------------- |
|
|
|
|
|
|
|
"Freeze" is a program that allows you to ship a Python program as a single |
|
|
|
stand-alone executable file. It is *not* a compiler; your programs don't run |
|
|
|
any faster, but they are more easily distributable, at least to platforms with |
|
|
|
the same OS and CPU. Read the README file of the freeze program for more |
|
|
|
disclaimers. |
|
|
|
|
|
|
|
You can use freeze on Windows, but you must download the source tree (see |
|
|
|
http://www.python.org/download/source). The freeze program is in the |
|
|
|
``Tools\freeze`` subdirectory of the source tree. |
|
|
|
|
|
|
|
You need the Microsoft VC++ compiler, and you probably need to build Python. |
|
|
|
The required project files are in the PCbuild directory. |
|
|
|
How do I make an executable from a Python script? |
|
|
|
------------------------------------------------- |
|
|
|
|
|
|
|
See http://www.py2exe.org/ for a distutils extension that allows you |
|
|
|
to create console and GUI executables from Python code. |
|
|
|
|
|
|
|
Is a ``*.pyd`` file the same as a DLL? |
|
|
|
-------------------------------------- |
|
|
|
@ -292,7 +200,7 @@ Embedding the Python interpreter in a Windows app can be summarized as follows: |
|
|
|
be a DLL to handle importing modules that are themselves DLL's. (This is the |
|
|
|
first key undocumented fact.) Instead, link to :file:`python{NN}.dll`; it is |
|
|
|
typically installed in ``C:\Windows\System``. *NN* is the Python version, a |
|
|
|
number such as "23" for Python 2.3. |
|
|
|
number such as "33" for Python 3.3. |
|
|
|
|
|
|
|
You can link to Python in two different ways. Load-time linking means |
|
|
|
linking against :file:`python{NN}.lib`, while run-time linking means linking |
|
|
|
@ -376,47 +284,6 @@ Embedding the Python interpreter in a Windows app can be summarized as follows: |
|
|
|
object that supports read and write, so all you need is a Python object |
|
|
|
(defined in your extension module) that contains read() and write() methods. |
|
|
|
|
|
|
|
|
|
|
|
How do I use Python for CGI? |
|
|
|
---------------------------- |
|
|
|
|
|
|
|
On the Microsoft IIS server or on the Win95 MS Personal Web Server you set up |
|
|
|
Python in the same way that you would set up any other scripting engine. |
|
|
|
|
|
|
|
Run regedt32 and go to:: |
|
|
|
|
|
|
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap |
|
|
|
|
|
|
|
and enter the following line (making any specific changes that your system may |
|
|
|
need):: |
|
|
|
|
|
|
|
.py :REG_SZ: c:\<path to python>\python.exe -u %s %s |
|
|
|
|
|
|
|
This line will allow you to call your script with a simple reference like: |
|
|
|
``http://yourserver/scripts/yourscript.py`` provided "scripts" is an |
|
|
|
"executable" directory for your server (which it usually is by default). The |
|
|
|
:option:`-u` flag specifies unbuffered and binary mode for stdin - needed when |
|
|
|
working with binary data. |
|
|
|
|
|
|
|
In addition, it is recommended that using ".py" may not be a good idea for the |
|
|
|
file extensions when used in this context (you might want to reserve ``*.py`` |
|
|
|
for support modules and use ``*.cgi`` or ``*.cgp`` for "main program" scripts). |
|
|
|
|
|
|
|
In order to set up Internet Information Services 5 to use Python for CGI |
|
|
|
processing, please see the following links: |
|
|
|
|
|
|
|
http://www.e-coli.net/pyiis_server.html (for Win2k Server) |
|
|
|
http://www.e-coli.net/pyiis.html (for Win2k pro) |
|
|
|
|
|
|
|
Configuring Apache is much simpler. In the Apache configuration file |
|
|
|
``httpd.conf``, add the following line at the end of the file:: |
|
|
|
|
|
|
|
ScriptInterpreterSource Registry |
|
|
|
|
|
|
|
Then, give your Python CGI-scripts the extension .py and put them in the cgi-bin |
|
|
|
directory. |
|
|
|
|
|
|
|
|
|
|
|
How do I keep editors from inserting tabs into my Python source? |
|
|
|
---------------------------------------------------------------- |
|
|
|
|
|
|
|
@ -460,116 +327,6 @@ with the additional feature of being able to send CTRL+C and CTRL+BREAK |
|
|
|
to console subprocesses which are designed to handle those signals. See |
|
|
|
:func:`os.kill` for further details. |
|
|
|
|
|
|
|
|
|
|
|
Why does os.path.isdir() fail on NT shared directories? |
|
|
|
------------------------------------------------------- |
|
|
|
|
|
|
|
In order to work correctly, :func:`os.path.isdir` requires a ``"\\"`` at the |
|
|
|
end of the shared drive:: |
|
|
|
|
|
|
|
>>> import os |
|
|
|
>>> os.path.isdir('\\\\rorschach\\public') |
|
|
|
0 |
|
|
|
>>> os.path.isdir('\\\\rorschach\\public\\') |
|
|
|
1 |
|
|
|
|
|
|
|
It helps to think of share points as being like drive letters. Example:: |
|
|
|
|
|
|
|
k: is not a directory |
|
|
|
k:\ is a directory |
|
|
|
k:\media is a directory |
|
|
|
k:\media\ is not a directory |
|
|
|
|
|
|
|
The same rules apply if you substitute ``"k:"`` with ``"\\conky\foo"``:: |
|
|
|
|
|
|
|
\\conky\foo is not a directory |
|
|
|
\\conky\foo\ is a directory |
|
|
|
\\conky\foo\media is a directory |
|
|
|
\\conky\foo\media\ is not a directory |
|
|
|
|
|
|
|
|
|
|
|
cgi.py (or other CGI programming) doesn't work sometimes on NT or win95! |
|
|
|
------------------------------------------------------------------------ |
|
|
|
|
|
|
|
Be sure you have the latest python.exe, that you are using python.exe rather |
|
|
|
than a GUI version of Python and that you have configured the server to execute |
|
|
|
:: |
|
|
|
|
|
|
|
"...\python.exe -u ..." |
|
|
|
|
|
|
|
for the CGI execution. The :option:`-u` (unbuffered) option on NT and Win95 |
|
|
|
prevents the interpreter from altering newlines in the standard input and |
|
|
|
output. Without it post/multipart requests will seem to have the wrong length |
|
|
|
and binary (e.g. GIF) responses may get garbled (resulting in broken images, PDF |
|
|
|
files, and other binary downloads failing). |
|
|
|
|
|
|
|
|
|
|
|
Why doesn't os.popen() work in PythonWin on NT? |
|
|
|
----------------------------------------------- |
|
|
|
|
|
|
|
The reason that os.popen() doesn't work from within PythonWin is due to a bug in |
|
|
|
Microsoft's C Runtime Library (CRT). The CRT assumes you have a Win32 console |
|
|
|
attached to the process. |
|
|
|
|
|
|
|
You should use the win32pipe module's popen() instead which doesn't depend on |
|
|
|
having an attached Win32 console. |
|
|
|
|
|
|
|
Example:: |
|
|
|
|
|
|
|
import win32pipe |
|
|
|
f = win32pipe.popen('dir /c c:\\') |
|
|
|
print(f.readlines()) |
|
|
|
f.close() |
|
|
|
|
|
|
|
|
|
|
|
Why doesn't os.popen()/win32pipe.popen() work on Win9x? |
|
|
|
------------------------------------------------------- |
|
|
|
|
|
|
|
There is a bug in Win9x that prevents os.popen/win32pipe.popen* from |
|
|
|
working. The good news is there is a way to work around this problem. The |
|
|
|
Microsoft Knowledge Base article that you need to lookup is: Q150956. You will |
|
|
|
find links to the knowledge base at: http://support.microsoft.com/. |
|
|
|
|
|
|
|
|
|
|
|
PyRun_SimpleFile() crashes on Windows but not on Unix; why? |
|
|
|
----------------------------------------------------------- |
|
|
|
|
|
|
|
This is very sensitive to the compiler vendor, version and (perhaps) even |
|
|
|
options. If the FILE* structure in your embedding program isn't the same as is |
|
|
|
assumed by the Python interpreter it won't work. |
|
|
|
|
|
|
|
The Python 1.5.* DLLs (``python15.dll``) are all compiled with MS VC++ 5.0 and |
|
|
|
with multithreading-DLL options (``/MD``). |
|
|
|
|
|
|
|
If you can't change compilers or flags, try using :c:func:`Py_RunSimpleString`. |
|
|
|
A trick to get it to run an arbitrary file is to construct a call to |
|
|
|
:func:`exec` and :func:`open` with the name of your file as argument. |
|
|
|
|
|
|
|
Also note that you can not mix-and-match Debug and Release versions. If you |
|
|
|
wish to use the Debug Multithreaded DLL, then your module *must* have ``_d`` |
|
|
|
appended to the base name. |
|
|
|
|
|
|
|
|
|
|
|
Importing _tkinter fails on Windows 95/98: why? |
|
|
|
------------------------------------------------ |
|
|
|
|
|
|
|
Sometimes, the import of _tkinter fails on Windows 95 or 98, complaining with a |
|
|
|
message like the following:: |
|
|
|
|
|
|
|
ImportError: DLL load failed: One of the library files needed |
|
|
|
to run this application cannot be found. |
|
|
|
|
|
|
|
It could be that you haven't installed Tcl/Tk, but if you did install Tcl/Tk, |
|
|
|
and the Wish application works correctly, the problem may be that its installer |
|
|
|
didn't manage to edit the autoexec.bat file correctly. It tries to add a |
|
|
|
statement that changes the PATH environment variable to include the Tcl/Tk 'bin' |
|
|
|
subdirectory, but sometimes this edit doesn't quite work. Opening it with |
|
|
|
notepad usually reveals what the problem is. |
|
|
|
|
|
|
|
(One additional hint, noted by David Szafranski: you can't use long filenames |
|
|
|
here; e.g. use ``C:\PROGRA~1\Tcl\bin`` instead of ``C:\Program Files\Tcl\bin``.) |
|
|
|
|
|
|
|
|
|
|
|
How do I extract the downloaded documentation on Windows? |
|
|
|
--------------------------------------------------------- |
|
|
|
|
|
|
|
@ -581,38 +338,3 @@ Simply rename the downloaded file to have the .TGZ extension, and WinZip will be |
|
|
|
able to handle it. (If your copy of WinZip doesn't, get a newer one from |
|
|
|
http://www.winzip.com.) |
|
|
|
|
|
|
|
|
|
|
|
Missing cw3215mt.dll (or missing cw3215.dll) |
|
|
|
-------------------------------------------- |
|
|
|
|
|
|
|
Sometimes, when using Tkinter on Windows, you get an error that cw3215mt.dll or |
|
|
|
cw3215.dll is missing. |
|
|
|
|
|
|
|
Cause: you have an old Tcl/Tk DLL built with cygwin in your path (probably |
|
|
|
``C:\Windows``). You must use the Tcl/Tk DLLs from the standard Tcl/Tk |
|
|
|
installation (Python 1.5.2 comes with one). |
|
|
|
|
|
|
|
|
|
|
|
Warning about CTL3D32 version from installer |
|
|
|
-------------------------------------------- |
|
|
|
|
|
|
|
The Python installer issues a warning like this:: |
|
|
|
|
|
|
|
This version uses CTL3D32.DLL which is not the correct version. |
|
|
|
This version is used for windows NT applications only. |
|
|
|
|
|
|
|
Tim Peters: |
|
|
|
|
|
|
|
This is a Microsoft DLL, and a notorious source of problems. The message |
|
|
|
means what it says: you have the wrong version of this DLL for your operating |
|
|
|
system. The Python installation did not cause this -- something else you |
|
|
|
installed previous to this overwrote the DLL that came with your OS (probably |
|
|
|
older shareware of some sort, but there's no way to tell now). If you search |
|
|
|
for "CTL3D32" using any search engine (AltaVista, for example), you'll find |
|
|
|
hundreds and hundreds of web pages complaining about the same problem with |
|
|
|
all sorts of installation programs. They'll point you to ways to get the |
|
|
|
correct version reinstalled on your system (since Python doesn't cause this, |
|
|
|
we can't fix it). |
|
|
|
|
|
|
|
David A Burton has written a little program to fix this. Go to |
|
|
|
http://www.burtonsys.com/downloads.html and click on "ctl3dfix.zip". |