blob: 0a85a403d5c0ebf0947286307637161ab12570d4 [file] [log] [blame]
Georg Brandld7413152009-10-11 21:25:26 +00001:tocdepth: 2
2
3.. _windows-faq:
4
5=====================
6Python on Windows FAQ
7=====================
8
9.. contents::
10
Georg Brandl62423cb2009-12-19 17:59:59 +000011.. XXX need review for Python 3.
12 XXX need review for Windows Vista/Seven?
13
14
Georg Brandld7413152009-10-11 21:25:26 +000015How do I run a Python program under Windows?
16--------------------------------------------
17
18This is not necessarily a straightforward question. If you are already familiar
19with running programs from the Windows command line then everything will seem
Brian Curtin655b0c42012-12-16 23:58:09 -060020obvious; otherwise, you might need a little more guidance.
Georg Brandld7413152009-10-11 21:25:26 +000021
22.. sidebar:: |Python Development on XP|_
23 :subtitle: `Python Development on XP`_
24
25 This series of screencasts aims to get you up and running with Python on
26 Windows XP. The knowledge is distilled into 1.5 hours and will get you up
27 and running with the right Python distribution, coding in your choice of IDE,
28 and debugging and writing solid code with unit-tests.
29
30.. |Python Development on XP| image:: python-video-icon.png
31.. _`Python Development on XP`:
32 http://www.showmedo.com/videos/series?name=pythonOzsvaldPyNewbieSeries
33
34Unless you use some sort of integrated development environment, you will end up
35*typing* Windows commands into what is variously referred to as a "DOS window"
36or "Command prompt window". Usually you can create such a window from your
Brian Curtin655b0c42012-12-16 23:58:09 -060037Start menu; under Windows 7 the menu selection is :menuselection:`Start -->
Georg Brandld7413152009-10-11 21:25:26 +000038Programs --> Accessories --> Command Prompt`. You should be able to recognize
39when you have started such a window because you will see a Windows "command
40prompt", which usually looks like this::
41
42 C:\>
43
44The letter may be different, and there might be other things after it, so you
45might just as easily see something like::
46
Brian Curtin655b0c42012-12-16 23:58:09 -060047 D:\YourName\Projects\Python>
Georg Brandld7413152009-10-11 21:25:26 +000048
49depending on how your computer has been set up and what else you have recently
50done with it. Once you have started such a window, you are well on the way to
51running Python programs.
52
53You need to realize that your Python scripts have to be processed by another
Brian Curtin655b0c42012-12-16 23:58:09 -060054program called the Python *interpreter*. The interpreter reads your script,
Georg Brandld7413152009-10-11 21:25:26 +000055compiles it into bytecodes, and then executes the bytecodes to run your
56program. So, how do you arrange for the interpreter to handle your Python?
57
58First, you need to make sure that your command window recognises the word
59"python" as an instruction to start the interpreter. If you have opened a
60command window, you should try entering the command ``python`` and hitting
Brian Curtin655b0c42012-12-16 23:58:09 -060061return.::
Georg Brandld7413152009-10-11 21:25:26 +000062
Brian Curtin655b0c42012-12-16 23:58:09 -060063 C:\Users\YourName> python
64
65You should then see something like::
66
67 Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
Georg Brandld7413152009-10-11 21:25:26 +000068 Type "help", "copyright", "credits" or "license" for more information.
69 >>>
70
71You have started the interpreter in "interactive mode". That means you can enter
72Python statements or expressions interactively and have them executed or
73evaluated while you wait. This is one of Python's strongest features. Check it
74by entering a few expressions of your choice and seeing the results::
75
Georg Brandl62423cb2009-12-19 17:59:59 +000076 >>> print("Hello")
Georg Brandld7413152009-10-11 21:25:26 +000077 Hello
78 >>> "Hello" * 3
79 HelloHelloHello
80
81Many people use the interactive mode as a convenient yet highly programmable
82calculator. When you want to end your interactive Python session, hold the Ctrl
83key down while you enter a Z, then hit the "Enter" key to get back to your
84Windows command prompt.
85
86You may also find that you have a Start-menu entry such as :menuselection:`Start
Brian Curtin655b0c42012-12-16 23:58:09 -060087--> Programs --> Python 3.3 --> Python (command line)` that results in you
Georg Brandld7413152009-10-11 21:25:26 +000088seeing the ``>>>`` prompt in a new window. If so, the window will disappear
89after you enter the Ctrl-Z character; Windows is running a single "python"
90command in the window, and closes it when you terminate the interpreter.
91
92If the ``python`` command, instead of displaying the interpreter prompt ``>>>``,
93gives you a message like::
94
Brian Curtin655b0c42012-12-16 23:58:09 -060095 'python' is not recognized as an internal or external command, operable program or batch file.
Georg Brandld7413152009-10-11 21:25:26 +000096
97.. sidebar:: |Adding Python to DOS Path|_
98 :subtitle: `Adding Python to DOS Path`_
99
100 Python is not added to the DOS path by default. This screencast will walk
101 you through the steps to add the correct entry to the `System Path`, allowing
102 Python to be executed from the command-line by all users.
103
104.. |Adding Python to DOS Path| image:: python-video-icon.png
105.. _`Adding Python to DOS Path`:
106 http://showmedo.com/videos/video?name=960000&fromSeriesID=96
107
108
109or::
110
111 Bad command or filename
112
113then you need to make sure that your computer knows where to find the Python
114interpreter. To do this you will have to modify a setting called PATH, which is
115a list of directories where Windows will look for programs.
116
117You should arrange for Python's installation directory to be added to the PATH
118of every command window as it starts. If you installed Python fairly recently
119then the command ::
120
121 dir C:\py*
122
123will probably tell you where it is installed; the usual location is something
Brian Curtin655b0c42012-12-16 23:58:09 -0600124like ``C:\Python33``. Otherwise you will be reduced to a search of your whole
Georg Brandld7413152009-10-11 21:25:26 +0000125disk ... use :menuselection:`Tools --> Find` or hit the :guilabel:`Search`
126button and look for "python.exe". Supposing you discover that Python is
Brian Curtin655b0c42012-12-16 23:58:09 -0600127installed in the ``C:\Python33`` directory (the default at the time of writing),
Georg Brandld7413152009-10-11 21:25:26 +0000128you should make sure that entering the command ::
129
Brian Curtin655b0c42012-12-16 23:58:09 -0600130 c:\Python33\python
Georg Brandld7413152009-10-11 21:25:26 +0000131
132starts up the interpreter as above (and don't forget you'll need a "CTRL-Z" and
Brian Curtin655b0c42012-12-16 23:58:09 -0600133an "Enter" to get out of it). Once you have verified the directory, you can
134add it to the system path to make it easier to start Python by just running
135the ``python`` command. This is currently an option in the installer as of
136CPython 3.3.
Georg Brandld7413152009-10-11 21:25:26 +0000137
Brian Curtin655b0c42012-12-16 23:58:09 -0600138More information about environment variables can be found on the
139:ref:`Using Python on Windows <setting-envvars>` page.
Georg Brandld7413152009-10-11 21:25:26 +0000140
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000141How do I make Python scripts executable?
Georg Brandld7413152009-10-11 21:25:26 +0000142----------------------------------------
143
Brian Curtin655b0c42012-12-16 23:58:09 -0600144On Windows, the standard Python installer already associates the .py
Georg Brandld7413152009-10-11 21:25:26 +0000145extension with a file type (Python.File) and gives that file type an open
146command that runs the interpreter (``D:\Program Files\Python\python.exe "%1"
147%*``). This is enough to make scripts executable from the command prompt as
148'foo.py'. If you'd rather be able to execute the script by simple typing 'foo'
149with no extension you need to add .py to the PATHEXT environment variable.
150
Georg Brandld7413152009-10-11 21:25:26 +0000151Why does Python sometimes take so long to start?
152------------------------------------------------
153
154Usually Python starts very quickly on Windows, but occasionally there are bug
155reports that Python suddenly begins to take a long time to start up. This is
156made even more puzzling because Python will work fine on other Windows systems
157which appear to be configured identically.
158
159The problem may be caused by a misconfiguration of virus checking software on
160the problem machine. Some virus scanners have been known to introduce startup
161overhead of two orders of magnitude when the scanner is configured to monitor
162all reads from the filesystem. Try checking the configuration of virus scanning
163software on your systems to ensure that they are indeed configured identically.
164McAfee, when configured to scan all file system read activity, is a particular
165offender.
166
167
Brian Curtin655b0c42012-12-16 23:58:09 -0600168How do I make an executable from a Python script?
169-------------------------------------------------
Georg Brandld7413152009-10-11 21:25:26 +0000170
Brian Curtin655b0c42012-12-16 23:58:09 -0600171See http://www.py2exe.org/ for a distutils extension that allows you
172to create console and GUI executables from Python code.
Georg Brandld7413152009-10-11 21:25:26 +0000173
174Is a ``*.pyd`` file the same as a DLL?
175--------------------------------------
176
177.. XXX update for py3k (PyInit_foo)
178
179Yes, .pyd files are dll's, but there are a few differences. If you have a DLL
180named ``foo.pyd``, then it must have a function ``initfoo()``. You can then
181write Python "import foo", and Python will search for foo.pyd (as well as
182foo.py, foo.pyc) and if it finds it, will attempt to call ``initfoo()`` to
183initialize it. You do not link your .exe with foo.lib, as that would cause
184Windows to require the DLL to be present.
185
186Note that the search path for foo.pyd is PYTHONPATH, not the same as the path
187that Windows uses to search for foo.dll. Also, foo.pyd need not be present to
188run your program, whereas if you linked your program with a dll, the dll is
189required. Of course, foo.pyd is required if you want to say ``import foo``. In
190a DLL, linkage is declared in the source code with ``__declspec(dllexport)``.
191In a .pyd, linkage is defined in a list of available functions.
192
193
194How can I embed Python into a Windows application?
195--------------------------------------------------
196
197Embedding the Python interpreter in a Windows app can be summarized as follows:
198
1991. Do _not_ build Python into your .exe file directly. On Windows, Python must
200 be a DLL to handle importing modules that are themselves DLL's. (This is the
Georg Brandl4985ff22010-10-17 10:14:38 +0000201 first key undocumented fact.) Instead, link to :file:`python{NN}.dll`; it is
202 typically installed in ``C:\Windows\System``. *NN* is the Python version, a
Brian Curtin655b0c42012-12-16 23:58:09 -0600203 number such as "33" for Python 3.3.
Georg Brandld7413152009-10-11 21:25:26 +0000204
Georg Brandl4985ff22010-10-17 10:14:38 +0000205 You can link to Python in two different ways. Load-time linking means
206 linking against :file:`python{NN}.lib`, while run-time linking means linking
207 against :file:`python{NN}.dll`. (General note: :file:`python{NN}.lib` is the
Georg Brandlfc9794a2010-10-17 10:15:50 +0000208 so-called "import lib" corresponding to :file:`python{NN}.dll`. It merely
Georg Brandl4985ff22010-10-17 10:14:38 +0000209 defines symbols for the linker.)
Georg Brandld7413152009-10-11 21:25:26 +0000210
Georg Brandl4985ff22010-10-17 10:14:38 +0000211 Run-time linking greatly simplifies link options; everything happens at run
212 time. Your code must load :file:`python{NN}.dll` using the Windows
Georg Brandld7413152009-10-11 21:25:26 +0000213 ``LoadLibraryEx()`` routine. The code must also use access routines and data
214 in :file:`python{NN}.dll` (that is, Python's C API's) using pointers obtained
215 by the Windows ``GetProcAddress()`` routine. Macros can make using these
216 pointers transparent to any C code that calls routines in Python's C API.
217
218 Borland note: convert :file:`python{NN}.lib` to OMF format using Coff2Omf.exe
219 first.
220
Georg Brandl4985ff22010-10-17 10:14:38 +0000221 .. XXX what about static linking?
222
Georg Brandld7413152009-10-11 21:25:26 +00002232. If you use SWIG, it is easy to create a Python "extension module" that will
224 make the app's data and methods available to Python. SWIG will handle just
225 about all the grungy details for you. The result is C code that you link
226 *into* your .exe file (!) You do _not_ have to create a DLL file, and this
227 also simplifies linking.
228
2293. SWIG will create an init function (a C function) whose name depends on the
230 name of the extension module. For example, if the name of the module is leo,
231 the init function will be called initleo(). If you use SWIG shadow classes,
232 as you should, the init function will be called initleoc(). This initializes
233 a mostly hidden helper class used by the shadow class.
234
235 The reason you can link the C code in step 2 into your .exe file is that
236 calling the initialization function is equivalent to importing the module
237 into Python! (This is the second key undocumented fact.)
238
2394. In short, you can use the following code to initialize the Python interpreter
240 with your extension module.
241
242 .. code-block:: c
243
244 #include "python.h"
245 ...
246 Py_Initialize(); // Initialize Python.
247 initmyAppc(); // Initialize (import) the helper class.
248 PyRun_SimpleString("import myApp") ; // Import the shadow class.
249
2505. There are two problems with Python's C API which will become apparent if you
251 use a compiler other than MSVC, the compiler used to build pythonNN.dll.
252
253 Problem 1: The so-called "Very High Level" functions that take FILE *
254 arguments will not work in a multi-compiler environment because each
255 compiler's notion of a struct FILE will be different. From an implementation
256 standpoint these are very _low_ level functions.
257
258 Problem 2: SWIG generates the following code when generating wrappers to void
259 functions:
260
261 .. code-block:: c
262
263 Py_INCREF(Py_None);
264 _resultobj = Py_None;
265 return _resultobj;
266
267 Alas, Py_None is a macro that expands to a reference to a complex data
268 structure called _Py_NoneStruct inside pythonNN.dll. Again, this code will
269 fail in a mult-compiler environment. Replace such code by:
270
271 .. code-block:: c
272
273 return Py_BuildValue("");
274
275 It may be possible to use SWIG's ``%typemap`` command to make the change
276 automatically, though I have not been able to get this to work (I'm a
277 complete SWIG newbie).
278
2796. Using a Python shell script to put up a Python interpreter window from inside
280 your Windows app is not a good idea; the resulting window will be independent
281 of your app's windowing system. Rather, you (or the wxPythonWindow class)
282 should create a "native" interpreter window. It is easy to connect that
283 window to the Python interpreter. You can redirect Python's i/o to _any_
284 object that supports read and write, so all you need is a Python object
285 (defined in your extension module) that contains read() and write() methods.
286
Georg Brandld7413152009-10-11 21:25:26 +0000287How do I keep editors from inserting tabs into my Python source?
288----------------------------------------------------------------
289
290The FAQ does not recommend using tabs, and the Python style guide, :pep:`8`,
291recommends 4 spaces for distributed Python code; this is also the Emacs
292python-mode default.
293
294Under any editor, mixing tabs and spaces is a bad idea. MSVC is no different in
295this respect, and is easily configured to use spaces: Take :menuselection:`Tools
296--> Options --> Tabs`, and for file type "Default" set "Tab size" and "Indent
297size" to 4, and select the "Insert spaces" radio button.
298
299If you suspect mixed tabs and spaces are causing problems in leading whitespace,
300run Python with the :option:`-t` switch or run ``Tools/Scripts/tabnanny.py`` to
301check a directory tree in batch mode.
302
303
304How do I check for a keypress without blocking?
305-----------------------------------------------
306
307Use the msvcrt module. This is a standard Windows-specific extension module.
308It defines a function ``kbhit()`` which checks whether a keyboard hit is
309present, and ``getch()`` which gets one character without echoing it.
310
311
312How do I emulate os.kill() in Windows?
313--------------------------------------
314
Brian Curtinf4ed2062010-04-12 18:10:10 +0000315Prior to Python 2.7 and 3.2, to terminate a process, you can use :mod:`ctypes`::
Georg Brandlff24c8e2010-03-21 09:52:24 +0000316
317 import ctypes
Georg Brandld7413152009-10-11 21:25:26 +0000318
319 def kill(pid):
320 """kill function for Win32"""
Georg Brandlff24c8e2010-03-21 09:52:24 +0000321 kernel32 = ctypes.windll.kernel32
322 handle = kernel32.OpenProcess(1, 0, pid)
323 return (0 != kernel32.TerminateProcess(handle, 0))
Georg Brandld7413152009-10-11 21:25:26 +0000324
Brian Curtinf4ed2062010-04-12 18:10:10 +0000325In 2.7 and 3.2, :func:`os.kill` is implemented similar to the above function,
326with the additional feature of being able to send CTRL+C and CTRL+BREAK
327to console subprocesses which are designed to handle those signals. See
328:func:`os.kill` for further details.
329
Georg Brandld7413152009-10-11 21:25:26 +0000330How do I extract the downloaded documentation on Windows?
331---------------------------------------------------------
332
333Sometimes, when you download the documentation package to a Windows machine
334using a web browser, the file extension of the saved file ends up being .EXE.
335This is a mistake; the extension should be .TGZ.
336
337Simply rename the downloaded file to have the .TGZ extension, and WinZip will be
338able to handle it. (If your copy of WinZip doesn't, get a newer one from
339http://www.winzip.com.)
340