10 This document is devoted to general information on building and setup of the
11 Python environment for UEFI, the invocation of the interpreter, and things
12 that make working with Python easier.
14 It is assumed that you already have UDK2010 or later, or a current snapshot of
15 the EDK II sources from www.tianocore.org, and that you can successfully build
16 packages within that distribution.
20 1) All C extension modules must be statically linked (built in)
21 2) The site and os modules must exist as discrete files in ...\lib\python27.10
22 3) User-specific configurations are not supported.
23 4) Environment variables are not supported.
25 3. Getting and Building Python
26 ======================================================
29 This file describes the UEFI port of version 2.7.10 of the CPython distribution.
30 For development ease, a subset of the Python 2.7.10 distribution has been
31 included as part of the AppPkg/Applications/Python/Python-2.7.10 source tree.
32 If this is sufficient, you may skip to section 3.2, Building Python.
34 If a full distribution is desired, it can be merged into the Python-2.7.10
35 source tree. Directory AppPkg/Applications/Python/Python-2.7.10 corresponds
36 to the root directory of the CPython 2.7.10 distribution. The full
37 CPython 2.7.10 source code may be downloaded from
38 http://www.python.org/ftp/python/2.7.10/.
40 A. Within your EDK II development tree, extract the Python distribution into
41 AppPkg/Applications/Python/Python-2.7.10. This should merge the additional
42 files into the source tree. It will also create the following directories:
43 Demo Doc Grammar Mac Misc
44 PC PCbuild RISCOS Tools
46 The greatest change will be within the Python-2.7.10/Lib directory where
47 many more packages and modules will be added. These additional components
48 may not have been ported to EDK II yet.
52 A. From the AppPkg/Applications/Python/Python-2.7.10 directory, execute the
53 srcprep.bat (srcprep.sh) script to copy the header files from within the
54 PyMod-2.7.10 sub-tree into their corresponding directories within the
55 distribution. This step only needs to be performed prior to the first
56 build of Python, or if one of the header files within the PyMod tree has been
59 B. Edit PyMod-2.7.10\Modules\config.c to enable the built-in modules you need.
60 By default, it is configured for the minimally required set of modules.
61 Mandatory Built-in Modules:
62 edk2 errno imp marshal
64 Additional built-in modules which are required to use the help()
65 functionality provided by PyDoc, are:
66 _codecs _collections _functools _random
67 _sre _struct _weakref binascii
68 cStringIO gc itertools math
71 C. Edit AppPkg/AppPkg.dsc to enable (uncomment) the Python2710.inf line
72 within the [Components] section.
74 D. Build AppPkg using the standard "build" command:
75 For example, to build Python for an X64 CPU architecture:
76 build -a X64 -p AppPkg\AppPkg.dsc
78 4. Python-related paths and files
79 =================================
80 Python depends upon the existence of several directories and files on the
83 \EFI Root of the UEFI system area.
84 |- \Tools Location of the Python.efi executable.
85 |- \Boot UEFI specified Boot directory.
86 |- \StdLib Root of the Standard Libraries sub-tree.
87 |- \etc Configuration files used by libraries.
88 |- \tmp Temporary files created by tmpfile(), etc.
89 |- \lib Root of the libraries tree.
90 |- \python27.10 Directory containing the Python library
92 |- \lib-dynload Dynamically loadable Python extensions.
93 |- \site-packages Site-specific packages and modules.
95 NOTE: The name of the directory containing the Python library modules has
96 changed in order to distinguish it from the library modules for
101 These directories, on the target system, are populated from the development
104 * \Efi\Tools receives a copy of Build/AppPkg/DEBUG_VS2015/X64/Python2710.efi.
106 Modify the host path to match your build type and compiler.
108 * The \Efi\StdLib\etc directory is populated from the StdLib/Efi/StdLib/etc
111 * Directory \Efi\StdLib\lib\python27.10 is populated with packages and modules
112 from the AppPkg/Applications/Python/Python-2.7.10/Lib directory.
113 The recommended minimum set of modules (.py, .pyc, and/or .pyo):
114 os stat ntpath warnings traceback
115 site types copy_reg linecache genericpath
117 * Python C Extension Modules built as dynamically loadable extensions go into
118 the \Efi\StdLib\lib\python.27\lib-dynload directory. This functionality is not
121 A script, libprep.bat (libprep.sh), is provided which facilitates the population
122 of the target Lib directory. Execute this script from within the
123 AppPkg/Applications/Python/Python-2.7.10 directory, providing a single argument
124 which is the path to the destination directory. The appropriate contents of the
125 AppPkg/Applications/Python/Python-2.7.10/Lib and
126 AppPkg/Applications/Python/Python-2.7.10/PyMod-2.7.10/Lib directories will be
127 recursively copied into the specified destination directory.
129 6. Example: Enabling socket support
130 ===================================
131 1. enable {"_socket", init_socket}, in Efi\config.c
132 2. enable LibraryClasses BsdSocketLib and EfiSocketLib in PythonCore.inf.
134 build -a X64 -p AppPkg\AppPkg.dsc
135 6. copy Build\AppPkg\DEBUG_VS2005\X64\Python2710.efi to \Efi\Tools on your
136 target system. Replace "DEBUG_VS2005\X64", in the source path, with
137 values appropriate for your tool chain and processor architecture.
141 Python must currently be run from an EFI FAT-32 partition, or volume, under
142 the UEFI Shell. At the Shell prompt enter the desired volume name, followed
143 by a colon ':', then press Enter. Python can then be executed by typing its
144 name, followed by any desired options and arguments.
148 2.0 FS0:\> python2710
149 Python 2.7.10 (default, Oct 13 2015, 16:21:53) [C] on uefi
150 Type "help", "copyright", "credits" or "license" for more information.
155 Python, as distributed, sends its interactive prompts to stderr. If
156 STDERR isn't enabled in UEFI Setup so that it's output goes to the
157 console, it may appear that Python hangs on startup. If this happens,
158 one may be able to rectify the condition by typing "exit()" followed
159 by <enter> to exit out of Python. Then, type "exit" at the Shell prompt
160 which should enter Setup where you can use the Boot Maintenance
161 Manager to modify your Console settings.
164 Some platforms don't include the Setup utility, or don't allow STDERR to
165 be modified. In these cases, Python may be started with the '-#' option
166 which will cause stderr to be the same as stdout and should allow
167 Python to be used interactively on those platforms.
169 Depending upon the version of Shell you are using, it may be necessary
170 to escape the '#' character so that the Shell doesn't interpret it as
171 the start of a comment. The escape character is '^'.
175 8. Supported C Modules
176 ======================
177 Module Name C File(s)
178 =============== =============================================
179 _ast Python/Python-ast.c
180 _bisect Modules/_bisectmodule.c
181 _codecs Modules/_codecsmodule.c
182 _codecs_cn Modules/cjkcodecs/_codecs_cn.c
183 _codecs_hk Modules/cjkcodecs/_codecs_hk.c
184 _codecs_iso2022 Modules/cjkcodecs/_codecs_iso2022.c
185 _codecs_jp Modules/cjkcodecs/_codecs_jp
186 _codecs_kr Modules/cjkcodecs/_codecs_kr
187 _codecs_tw Modules/cjkcodecs/_codecs_tw
188 _collections Modules/_collectionsmodule.c
190 _functools Modules/_functoolsmodule.c
191 _heapq Modules/_heapqmodule.c
192 _io Modules/_io/_iomodule.c Modules/_io/*
193 _json Modules/_json.c
194 _md5 Modules/md5module.c Modules/md5.c
195 _multibytecodec Modules/cjkcodecs/_multibytecodec.c
196 _random Modules/_randommodule.c
197 _sha Modules/shamodule.c
198 _sha256 Modules/sha256module.c
199 _sha512 Modules/sha512module.c
200 _socket Modules/socketmodule.c
202 _struct Modules/_struct.c
203 _symtable Modules/symtablemodule.c
204 _weakref Modules/_weakref.c
205 array Modules/arraymodule.c
206 binascii Modules/binascii.c
207 cmath Modules/cmathmodule.c
208 cPickle Modules/cPickle.c
209 cStringIO Modules/cStringIO.c
210 datetime Modules/datetimemodule.c
211 edk2 Modules/Efi/edk2module.c
212 errno Modules/errnomodule.c
213 future_builtins Modules/future_builtins.c
214 gc Modules/gcmodule.c
216 itertools Modules/itertoolsmodule.c
217 marshal Python/marshal.c
218 math Modules/mathmodule.c Modules/_math.c
219 operator Modules/operator.c
220 parser Modules/parsermodule.c
221 select Modules/selectmodule.c
222 signal Modules/signalmodule.c
223 strop Modules/stropmodule.c
224 time Modules/timemodule.c
225 xxsubtype Modules/xxsubtype.c
226 zipimport Modules/zipimport.c
227 zlib Modules/zlibmodule.c Modules/zlib/*
230 9. Tested Python Library Modules
231 ================================
232 This is a partial list of the packages and modules of the Python Standard
233 Library that have been tested or used in some manner.
235 encodings genericpath.py sha.py
236 importlib getopt.py SimpleHTTPServer.py
237 json hashlib.py site.py
238 pydoc_data heapq.py socket.py
239 xml HTMLParser.py SocketServer.py
240 abc.py inspect.py sre.py
241 argparse.py io.py sre_compile.py
242 ast.py keyword.py sre_constants.py
243 atexit.py linecache.py sre_parse.py
244 BaseHTTPServer.py locale.py stat.py
245 binhex.py md5.py string.py
246 bisect.py modulefinder.py StringIO.py
247 calendar.py ntpath.py struct.py
248 cmd.py numbers.py textwrap.py
249 codecs.py optparse.py token.py
250 collections.py os.py tokenize.py
251 copy.py platform.py traceback.py
252 copy_reg.py posixpath.py types.py
253 csv.py pydoc.py warnings.py
254 dummy_thread.py random.py weakref.py
255 fileinput.py re.py xmllib.py
256 formatter.py repr.py zipfile.py
257 functools.py runpy.py expat