1 This is a port of Python 2.3 to OS/2 using the EMX development tools
2 =========================================================================
4 What's new since the previous release
5 -------------------------------------
7 This release of the port incorporates the following changes from the
8 October 24, 2002 release of the Python 2.2.2 port:
10 - based on the Python v2.3 final release source.
11 - now setting higher number of file handles (250).
12 - defaults to building with PyMalloc enabled (Python 2.3 default).
13 - the port is now maintained in the Python CVS repository.
15 Python 2.3 incorporates several changes which have resolved the
16 longstanding problems the EMX port has had with test_longexp (used
17 to be "YOU HAVE BEEN WARNED" item 1).
20 Licenses and info about Python and EMX
21 --------------------------------------
23 Please read the file README.Python-2.3 included in this package for
24 information about Python 2.3. This file is the README file from the
25 Python 2.3 source distribution available via http://www.python.org/
26 and its mirrors. The file LICENCE.Python-2.3 is the text of the Licence
27 from the Python 2.3 source distribution.
29 Note that the EMX package that this package depends on is released under
30 the GNU General Public Licence. Please refer to the documentation
31 accompanying the EMX Runtime libraries for more information about the
32 implications of this. A copy of version 2 of the GPL is included as the
35 Readline and GDBM are covered by the GNU General Public Licence. I think
36 Eberhard Mattes' porting changes to BSD DB v1.85 are also GPL'ed (BSD DB
37 itself is BSD Licenced). ncurses and expat appear to be covered by MIT
38 style licences - please refer to the source distributions for more detail.
39 zlib is distributable under a very free license. GNU MP and GNU UFC are
40 under the GNU LGPL (see file COPYING.lib).
42 My patches to the Python-2.x source distributions, and any other packages
43 used in this port, are placed in the public domain.
45 This software is provided 'as-is', without any express or implied warranty.
46 In no event will the author be held liable for any damages arising from the
49 I do hope however that it proves useful to someone.
55 There have been ports of previous versions of Python to OS/2.
57 The best known would be that by Jeff Rush, most recently of version
58 1.5.2. Jeff used IBM's Visual Age C++ (v3) for his ports, and his
59 patches have been included in the Python 2.3 source distribution.
61 Andrew Zabolotny implemented a port of Python v1.5.2 using the EMX
62 development tools. His patches against the Python v1.5.2 source
63 distribution have become the core of this port, and without his efforts
64 this port wouldn't exist. Andrew's port also appears to have been
65 compiled with his port of gcc 2.95.2 to EMX, which I have but have
66 chosen not to use for the binary distribution of this port (see item 21
67 of the "YOU HAVE BEEN WARNED" section below).
69 Previous Python port releases by me:-
70 - v2.0 on March 31, 2001;
71 - v2.0 on April 25, 2001 (cleanup release + Stackless variant);
72 - v2.1 on June 17, 2001;
73 - v2.0 (Stackless re-release) on June 18, 2001.
74 - v2.1.1 on August 5, 2001;
75 - v2.1.1 on August 12, 2001 (cleanup release);
76 - v2.1.1 (updated DLL) on August 14, 2001;
77 - v2.2b2 on December 8, 2001 (not uploaded to archive sites);
78 - v2.2c1 on December 16, 2001 (not uploaded to archive sites);
79 - v2.2 on December 24, 2001;
80 - v2.2.1c2 on March 31, 2002 (not uploaded to archive sites);
81 - v2.2.1 on April 14, 2002.
82 - v2.2.2 on October 24, 2002.
84 It is possible to have these earlier ports still usable after installing
85 this port - see the README.os2emx.multiple_versions file, contributed by
86 Dr David Mertz, for a suggested approach to achieving this.
92 This package requires the EMX Runtime package, available from the
93 Hobbes (http://hobbes.nmsu.edu/) and LEO (http://archiv.leo.org/)
94 archives of OS/2 software. I have used EMX version 0.9d fix04 in
97 My development system is running OS/2 v4 with fixpack 12.
99 3rd party software which has been linked into dynamically loaded modules:
100 - ncurses (see http://dickey.his.com/ for more info, v5.2)
101 - GNU Readline (Kai Uwe Rommel's port available from Hobbes or LEO, v2.1)
102 - GNU GDBM (Kai Uwe Rommel's port available from Hobbes or LEO, v1.7.3)
103 - zlib (Hung-Chi Chu's port available from Hobbes or LEO, v1.1.3)
104 - expat (distributed with Python, v1.95.2)
105 - GNU MP (Peter Meerwald's port available from LEO, v2.0.2)
106 - GNU UFC (Kai Uwe Rommel's port available from LEO, v2.0.4)
108 The zlib module requires the Z.DLL to be installed - see the Installation
109 section and item 12 of the "YOU HAVE BEEN WARNED" section for more
115 I have attempted to make this port as complete and functional as I can,
116 notwithstanding the issues in the "YOU HAVE BEEN WARNED" section below.
120 Python.exe is linked as an a.out executable, ie using EMX method E1
121 to compile & link the executable. This is so that fork() works (see
122 "YOU HAVE BEEN WARNED" item 2).
124 Python23.dll is created as a normal OMF DLL, with an OMF import
125 library and module definition file. There is also an a.out (.a) import
126 library to support linking the DLL to a.out executables. The DLL
127 requires the EMX runtime DLLs.
129 This port has been built with complete support for multithreading.
133 As far as possible, extension modules have been made dynamically loadable
134 when the module is intended to be built this way. I haven't yet changed
135 the building of Python's standard modules over to using the DistUtils.
137 See "YOU HAVE BEEN WARNED" item 5 for notes about the fcntl module, and
138 "YOU HAVE BEEN WARNED" item 14 for notes about the pwd and grp modules.
140 Support for case sensitive module import semantics has been added to match
141 the Windows release. This can be deactivated by setting the PYTHONCASEOK
142 environment variable (the value doesn't matter) - see "YOU HAVE BEEN WARNED"
147 Where I've been able to locate the required 3rd party packages already
148 ported to OS/2, I've built and included them.
150 These include ncurses (_curses, _curses_panel), BSD DB (bsddb),
151 GNU GDBM (gdbm, dbm), zlib (zlib), GNU Readline (readline), expat
152 (pyexpat), GNU MP (mpz) and GNU UFC (crypt).
154 I have built these modules statically linked against the 3rd party
155 libraries, with the exception of zlib. Unfortunately my attempts to use
156 the dll version of GNU readline have been a dismal failure, in that when
157 the dynamically linked readline module is active other modules
158 immediately provoke a core dump when imported.
160 Only the BSD DB package (part of the BSD package distributed with EMX)
161 needed source modifications to be used for this port, pertaining to use
162 of errno with multithreading.
164 The other packages, except for ncurses and zlib, needed Makefile changes
165 for multithreading support but no source changes.
167 The _curses_panel module is a potential problem - see "YOU HAVE BEEN
170 Upstream source patches:
172 No updates to the Python 2.3 release have become available.
174 Eberhard Mattes' EMXFIX04 update to his EMX 0.9d tools suite includes
175 bug fixes for the BSD DB library. The bsddb module included in this
176 port incorporates these fixes.
178 Library and other distributed Python code:
180 The Python standard library lives in the Lib directory. All the standard
181 library code included with the Python 2.3 source distribution is included
182 in the binary archive, with the exception of the dos-8x3 and tkinter
183 subdirectories which have been omitted to reduce the size of the binary
184 archive - the dos-8x3 components are unnecessary duplicates and Tkinter
185 is not supported by this port (yet). All the plat-* subdirectories in the
186 source distribution have also been omitted, and a plat-os2emx directory
189 The Tools and Demo directories contain a collection of Python scripts.
190 To reduce the size of the binary archive, the Demo/sgi, Demo/Tix,
191 Demo/tkinter, Tools/audiopy and Tools/IDLE subdirectories have been
192 omitted as not being supported by this port. The Misc directory has
195 All subdirectories omitted from the binary archive can be reconstituted
196 from the Python 2.3 source distribution, if desired.
198 Support for building Python extensions:
200 The Config subdirectory contains the files describing the configuration
201 of the interpreter and the Makefile, import libraries for the Python DLL,
202 and the module definition file used to create the Python DLL. The
203 Include subdirectory contains all the standard Python header files
204 needed for building extensions.
206 As I don't have the Visual Age C++ compiler, I've made no attempt to
207 have this port support extensions built with that compiler.
213 This port is packaged into several archives:
214 - python-2.3-os2emx-bin-02????.zip (binaries, library modules)
215 - python-2.3-os2emx-src-03????.zip (source patches and makefiles)
217 Documentation for the Python language, as well as the Python 2.3
218 source distibution, can be obtained from the Python website
219 (http://www.python.org/) or the Python project pages at Sourceforge
220 (http://sf.net/projects/python/).
226 Obtain and install, as per the included instructions, the EMX runtime
229 If you wish to use the zlib module, you will need to obtain and install
230 the Z.DLL from Hung-Chi Chu's port of zlib v1.1.3 (zlib113.zip). See also
231 "YOU HAVE BEEN WARNED" item 12 below.
233 Unpack this archive, preserving the subdirectories, in the root directory
234 of the drive where you want Python to live.
236 Add the Python directory (eg C:\Python23) to the PATH and LIBPATH
237 variables in CONFIG.SYS.
239 You should then set the PYTHONHOME and PYTHONPATH environment variables
242 PYTHONHOME should be set to Python's top level directory. PYTHONPATH
243 should be set to the semicolon separated list of principal Python library
246 SET PYTHONHOME=F:/Python23
247 SET PYTHONPATH=F:/Python23/Lib;F:/Python23/Lib/plat-os2emx;
248 F:/Python23/Lib/lib-dynload;F:/Python23/Lib/site-packages
250 NOTE!: the PYTHONPATH setting above is linewrapped for this document - it
251 should all be on one line in CONFIG.SYS!
253 If you wish to use the curses module, you should set the TERM and TERMINFO
254 environment variables appropriately.
256 If you don't already have ncurses installed, I have included a copy of the
257 EMX subset of the Terminfo database included with the ncurses-5.2 source
258 distribution. This can be used by setting the TERMINFO environment variable
259 to the path of the Terminfo subdirectory below the Python home directory.
260 On my system this looks like:
261 SET TERMINFO=F:/Python23/Terminfo
263 For the TERM environment variable, I would try one of the following:
268 You will have to reboot your system for these changes to CONFIG.SYS to take
271 If you wish to compile all the included Python library modules to bytecode,
272 you can change into the Python home directory and run the COMPILEALL.CMD
275 You can execute the regression tests included with the Python 2.3 source
276 distribution by changing to the Python 2.3 home directory and executing the
277 REGRTEST.CMD batch file. The following tests are known to fail at this
279 - test_longexp (see "YOU HAVE BEEN WARNED" item 1);
280 - test_mhlib (I don't know of any port of MH to OS/2);
281 - test_pwd (see "YOU HAVE BEEN WARNED" item 14, probably a bug in my code);
282 - test_grp (as per test_pwd);
283 - test_strftime (see "YOU HAVE BEEN WARNED" item 20);
284 - test_socketserver (fork() related, see "YOU HAVE BEEN WARNED" item 2).
287 YOU HAVE BEEN WARNED!!
288 ----------------------
290 I know about a number of nasties in this port.
292 {1. Issue resolved...}
294 2. Eberhard Mattes, author of EMX, writes in his documentation that fork()
295 is very inefficient in the OS/2 environment. It also requires that the
296 executable be linked in a.out format rather than OMF. Use the os.exec
297 and/or the os.spawn family of functions where possible.
299 {3. Issue resolved...}
301 4. In the absence of GNU Readline, terminating the interpreter requires a
302 control-Z (^Z) followed by a carriage return. Jeff Rush documented this
303 problem in his Python 1.5.2 port. With Readline, a control-D (^D) works
304 as per the standard Unix environment.
306 5. EMX only has a partial implementation of fcntl(). The fcntl module
307 in this port supports what EMX supports. If fcntl is important to you,
308 please review the EMX C Library Reference (included in .INF format in the
309 EMXVIEW.ZIP archive as part of the complete EMX development tools suite).
310 Because of other side-effects I have modified the test_fcntl.py test
311 script to deactivate the exercising of the missing functionality.
313 6. The BSD DB module is linked against DB v1.85. This version is widely
314 known to have bugs, although some patches have become available (and are
315 incorporated into the included bsddb module). Unless you have problems
316 with software licenses which would rule out GDBM (and the dbm module
317 because it is linked against the GDBM library) or need it for file format
318 compatibility, you may be better off deleting it and relying on GDBM. I
319 haven't looked at porting the version of the module supporting the later
320 SleepyCat releases of BSD DB, which would also require a port of the
321 SleepyCat DB package.
323 7. The readline module has been linked against ncurses rather than the
324 termcap library supplied with EMX.
326 {8. Workaround implemented}
328 9. I have configured this port to use "/" as the preferred path separator
329 character, rather than "\" ('\\'), in line with the convention supported
330 by EMX. Backslashes are still supported of course, and still appear in
331 unexpected places due to outside sources that don't get normalised.
333 10. While the DistUtils components are now functional, other
334 packaging/binary handling tools and utilities such as those included in
335 the Demo and Tools directories - freeze in particular - are unlikely to
336 work. If you do get them going, I'd like to know about your success.
338 11. I haven't set out to support the [BEGIN|END]LIBPATH functionality
339 supported by one of the earlier ports (Rush's??). If it works let me know.
341 12. There appear to be several versions of Z.DLL floating around - the one
342 I have is 45061 bytes and dated January 22, 1999. I have a report that
343 another version causes SYS3175s when the zlib module is imported.
345 14. As a result of the limitations imposed by EMX's library routines, the
346 standard extension module pwd only synthesises a simple passwd database,
347 and the grp module cannot be supported at all.
349 I have written substitutes, in Python naturally, which can process real
350 passwd and group files for those applications (such as MailMan) that
351 require more than EMX emulates. I have placed pwd.py and grp.py in
352 Lib/plat-os2emx, which is usually before Lib/lib-dynload (which contains
353 pwd.pyd) in the PYTHONPATH. If you have become attached to what pwd.pyd
354 supports, you can put Lib/lib-dynload before Lib/plat-os2emx in PYTHONPATH
355 or delete/rename pwd.py & grp.py.
357 pwd.py & grp.py support locating their data files by looking in the
358 environment for them in the following sequence:
359 pwd.py: $ETC_PASSWD (%ETC_PASSWD%)
360 $ETC/passwd (%ETC%/passwd)
361 $PYTHONHOME/Etc/passwd (%PYTHONHOME%/Etc/passwd)
362 grp.py: $ETC_GROUP (%ETC_GROUP%)
363 $ETC/group (%ETC%/group)
364 $PYTHONHOME/Etc/group (%PYTHONHOME%/Etc/group)
366 Both modules support using either the ":" character (Unix standard) or
367 ";" (OS/2, DOS, Windows standard) field separator character, and pwd.py
368 implements the following drive letter conversions for the home_directory and
369 shell fields (for the ":" separator only):
373 Example versions of passwd and group are in the Etc subdirectory. Note
374 that as of this release, this code fails the regression test. I'm looking
375 into why, and hope to have this fixed.
377 15. As of Python 2.1, termios support has mutated. There is no longer a
378 platform specific TERMIOS.py containing the symbolic constants - these
379 now live in the termios module. EMX's termios routines don't support all
380 of the functionality now exposed by the termios module - refer to the EMX
381 documentation to find out what is supported.
383 16. The case sensitive import semantics introduced in Python 2.1 for other
384 case insensitive but case preserving file/operating systems (Windows etc),
385 have been incorporated into this port, and are active by default. Setting
386 the PYTHONCASEOK environment variable (to any value) reverts to the
387 previous (case insensitive) semantics.
389 17. Because I am statically linking ncurses, the _curses_panel
390 module has potential problems arising from separate library data areas.
391 To avoid this, I have configured the _curses_.pyd (imported as
392 "_curses_panel") to import the ncurses symbols it needs from _curses.pyd.
393 As a result the _curses module must be imported before the _curses_panel
394 module. As far as I can tell, the modules in the curses package do this.
395 If you have problems attempting to use the _curses_panel support please
396 let me know, and I'll look into an alternative solution.
398 18. I tried enabling the Python Object Allocator (PYMALLOC) code. While
399 the port built this way passes the regression test, the Numpy extension
400 (I tested v19.0.0) as built with with the port's DistUtils code doesn't
401 work. Specifically, attempting to "import Numeric" provokes a core dump.
402 Supposedly Numpy v20.1.0 contains a fix for this, but for reason outlined
403 in item 1 above, PYMALLOC is not enabled in this release.
405 19. sys.platform now reports "os2emx" instead of "os2". os.name still
406 reports "os2". This change was to make it easier to distinguish between
407 the VAC++ build (being maintained by Michael Muller) and the EMX build
408 (this port), principally for DistUtils.
410 20. it appears that the %W substitution in the EMX strftime() routine has
411 an off-by-one bug. strftime was listed as passing the regression tests
412 in previous releases, but this fact appears to have been an oversight in
413 the regression test suite. To fix this really requires a portable
414 strftime routine - I'm looking into using one from FreeBSD, but its not
417 21. previous releases of my Python ports have used the GCC optimisations
418 "-O2 -fomit-frame-pointer". After experimenting with various optimisation
419 settings, including deactivating assert()ions, I have concluded that "-O2"
420 appears the best compromise for GCC 2.8.1 on my hardware. Curiously,
421 deactivating assert() (via defining NDEBUG) _negatively_ impacts
422 performance, allbeit only slightly, so I've chosen to leave the assert()s
425 I did try using Andrew Zabolotny's (p)gcc 2.95.2 compiler, and in
426 general concluded that it produced larger objects that ran slower
427 than Mattes' gcc 2.8.1 compiler.
429 Pystone ratings varied from just over 2000/s (no optimisation at all)
430 to just under 3300/s (gcc 2.8.1, -O2) on my K6/2-300 system, for
431 100,000 iterations per run (rather than the default 10000).
433 As a result of the optimisation change, the Python DLL is about 10%
434 smaller than in the 2.1 release, and many of the dynamically loadable
435 modules are smaller too.
439 22. As of this release, os.spawnv() and os.spawnve() now expose EMX's
440 library routines rather than use the emulation in os.py.
442 In order to make use of some of the features this makes available in
443 the OS/2 environment, you should peruse the relevant EMX documentation
444 (EMXLIB.INF in the EMXVIEW.ZIP archive accompanying the EMX archives
445 on Hobbes or LEO). Be aware that I have exposed all the "mode" options
446 supported by EMX, but there are combinations that either cannot be
447 practically used by/in Python or have the potential to compromise your
450 23. pythonpm.exe in previous releases was just python.exe with the
451 WINDOWAPI linker option set in the pythonpm.def file. In practice,
452 this turns out to do nothing useful.
454 I have written a replacement which wraps the Python DLL in a genuine
455 Presentation Manager application. This version actually runs the
456 Python interpreter in a separate thread from the PM shell, in order
457 that PythonPM has a functioning message queue as good PM apps should.
458 In its current state, PythonPM's window is hidden. It can be displayed,
459 although it will have no content as nothing is ever written to the
460 window. Only the "hide" button is available. Although the code
461 has support for shutting PythonPM down when the Python interpreter is
462 still busy (via the "control" menu), this is not well tested and given
463 comments I've come across in EMX documentation suggesting that the
464 thread killing operation has problems I would suggest caution in
465 relying on this capability.
467 PythonPM processes commandline parameters normally. The standard input,
468 output and error streams are only useful if redirected, as PythonPM's
469 window is not a console in any form and so cannot accept or display
470 anything. This means that the -i option is ineffective.
472 Because the Python thread doesn't create its own message queue, creating
473 PM Windows and performing most PM operations is not possible from within
474 this thread. How this will affect supporting PM extensions (such as
475 Tkinter using a PM port of Tcl/Tk, or wxPython using the PM port of
476 WxWindows) is still being researched.
478 Note that os.fork() _DOES_NOT_WORK_ in PythonPM - SYS3175s are the result
479 of trying. os.spawnv() _does_ work. PythonPM passes all regression tests
480 that the standard Python interpreter (python.exe) passes, with the exception
481 of test_fork1 and test_socket which both attempt to use os.fork().
483 I very much want feedback on the performance, behaviour and utility of
484 PythonPM. I would like to add a PM console capability to it, but that
485 will be a non-trivial effort. I may be able to leverage the code in
486 Illya Vaes' Tcl/Tk port, which would make it easier.
490 24. os.chdir() now uses EMX's _chdir2(), which supports changing
491 both drive and directory at once. Similarly, os.getcwd() now uses
492 EMX's _getcwd() which returns drive as well as path.
494 [2001/12/08] - 2.2 Beta 2
496 25. pyconfig.h (previously known as config.h) is now located in the
497 Include subdirectory with all other include files.
499 [2001/12/16] - 2.2 Release Candidate 1
501 [2001/12/08] - 2.2 Final
503 [2002/03/31] - 2.2.1 Release Candidate 2
505 [2002/04/14] - 2.2.1 Final
509 26. now explicitly set the number of file handles available to a
510 Python process to 250. EMX default is 40, which is insufficient for the
511 recently checked in security improvments to the tempfile regression
512 test (test_tempfile) which tries to create 100 temporary files.
514 This setting can be overridden via the EMXOPT environment variable:
516 is equivalent to the setting currently used. The emxbind utility (if you
517 have it installed) can also be used to permanently change the setting in
518 python.exe - please refer to the EMX documentation for more information.
520 ... probably other issues that I've not encountered, or don't remember :-(
522 If you encounter other difficulties with this port, which can be
523 characterised as peculiar to this port rather than to the Python release,
524 I would like to hear about them. However I cannot promise to be able to do
525 anything to resolve such problems. See the Contact section below...
531 In no particular order of apparent importance or likelihood...
533 - support Tkinter and/or alternative GUI (wxWindows??)
539 In addition to people identified above, I'd like to thank:
540 - the BDFL, Guido van Rossum, and crew for Python;
541 - Dr David Mertz, for trying out a pre-release of this port;
542 - the Python-list/comp.lang.python community;
543 - John Poltorak, for input about pwd/grp.
548 Constructive feedback, negative or positive, about this port is welcome
549 and should be addressed to me at the e-mail addresses below.
551 I intend creating a private mailing list for announcements of fixes &
552 updates to this port. If you wish to receive such e-mail announcments,
553 please send me an e-mail requesting that you be added to this list.
556 E-mail: andymac@bullseye.apana.org.au, or andymac@pcug.org.au
557 Web: http://www.andymac.org/