• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1                                EDK II Python
2                                   ReadMe
3                                Version 2.7.2
4                                Release 1.02
5                                18 Jan. 2013
6
7
81. OVERVIEW
9===========
10This document is devoted to general information on building and setup of the
11Python environment for UEFI 2.3, the invocation of the interpreter, and things
12that make working with Python easier.
13
14It is assumed that you already have either UDK2010 or a current snapshot of
15the EDK II sources from www.tianocore.org, and that you can successfully build
16packages within that distribution.
17
182. Release Notes
19================
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\python.27
22  3)  User-specific configurations are not supported.
23  4)  Environment variables are not supported.
24
253. Getting and Building Python
26======================================================
27  3.1 Getting Python
28  ==================
29  For development ease, a subset of the Python 2.7.2 distribution has been
30  included in the AppPkg source tree.  If a full distribution is desired, the
31  Python-2.7.2 directory can be removed or renamed and the full source code
32  downloaded from http://www.python.org/ftp/python/2.7.2/.
33
34  A.  Within your EDK II development tree, extract the Python distribution into
35    AppPkg/Applications/Python.  This should create the
36    AppPkg/Applications/Python/Python-2.7.2 directory.
37
38  B.  Copy the files from PyMod-2.7.2 into the corresponding directories within
39    the Python-2.7.2 tree.  This will overwrite existing files with files
40    modified for UEFI usage.
41
42  3.2 Building Python
43  ===================
44  A.  Edit Efi/config.c to enable the built-in modules you need.
45        Mandatory Built-in Modules:
46        edk2      errno       imp         marshal
47
48      Additional built-in modules which are required to use the help()
49      functionality provided by PyDoc, are:
50        _codecs     _collections    _functools    _random
51        _sre        _struct         _weakref      binascii
52        cStringIO   gc              itertools     math
53        operator    time
54
55  B.  Edit AppPkg/AppPkg.dsc to enable (uncomment) the PythonCore.inf line
56    within the [Components] section.
57
58  C.  Build AppPkg, which includes Python, using the standard "build" command:
59    For example, to build Python for an X64 CPU architecture:
60                    build -a X64 -p AppPkg\AppPkg.dsc
61
624. Python-related paths and files
63=================================
64Python depends upon the existence of several directories and files on the
65target system.
66
67  \EFI                              Root of the UEFI system area.
68   |- \Tools                        Location of the Python.efi executable.
69   |- \Boot                         UEFI specified Boot directory.
70   |- \StdLib                       Root of the Standard Libraries sub-tree.
71       |- \etc                      Configuration files used by libraries.
72       |- \tmp                      Temporary files created by tmpfile(), etc.
73       |- \lib                      Root of the libraries tree.
74           |- \python.27            Directory containing the Python library
75               |                    modules.
76               |- \lib-dynload      Dynamically loadable Python extensions.
77               |- \site-packages    Site-specific packages and modules.
78
79
805. Installing Python
81====================
82These directories, on the target system, are populated from the development
83system as follows:
84
85  * \Efi\Tools receives a copy of Build/AppPkg/DEBUG_VS2005/X64/Python.efi.
86                                               ^^^^^ ^^^^^^^^^^
87    Modify the host path to match the your build type and compiler.
88
89  * The \Efi\StdLib\etc directory is populated from the StdLib/Efi/StdLib/etc
90    source directory.
91
92  * Directory \Efi\StdLib\lib\python.27 is populated with packages and modules
93    from the AppPkg/Applications/Python/Python-2.7.2/Lib directory.
94    The recommended minimum set of modules (.py, .pyc, and/or .pyo):
95        os      stat      ntpath      warnings      traceback
96        site    types     copy_reg    linecache     genericpath
97
98  * Python C Extension Modules built as dynamically loadable extensions go into
99    the \Efi\StdLib\lib\python.27\lib-dynload directory.  This functionality is
100    not yet implemented.
101
102
1036. Example: Enabling socket support
104===================================
105  1.  enable {"_socket", init_socket}, in Efi\config.c
106  2.  enable Python-2.7.2/Modules/socketmodule.c in PythonCore.inf.
107  3.  copy socket.py over to /Efi/StdLib/lib/python.27 on your target system.
108  4.  Make sure dependent modules are present(.py) or built in(.c):
109        functools, types, os, sys, warnings, cStringIO, StringIO, errno
110
111  5.  build -a X64 -p AppPkg\AppPkg.dsc
112  6.  copy Build\AppPkg\DEBUG_VS2005\X64\Python.efi to \Efi\Tools on your
113      target system. Replace "DEBUG_VS2005\X64", in the source path, with
114      values appropriate for your tool chain and processor architecture.
115
116
1177. Running Python
118=================
119  Python must currently be run from an EFI FAT-32 partition, or volume, under
120  the UEFI Shell.  At the Shell prompt enter the desired volume name, followed
121  by a colon ':', then press Enter.  Python can then be executed by typing its
122  name, followed by any desired options and arguments.
123
124  EXAMPLE:
125      2.0 Shell> fs0:
126      2.0 FS0:\> python
127      Python 2.7.2 (default, Oct 13 2015, 16:21:53) [C] on uefi
128      Type "help", "copyright", "credits" or "license" for more information.
129      >>> exit()
130      2.0 FS0:\>
131
132  NOTE:
133      Python, as distributed, sends its interactive prompts to stderr.  If
134      STDERR isn't enabled in UEFI Setup so that it's output goes to the
135      console, it may appear that Python hangs on startup.  If this happens,
136      one may be able to rectify the condition by typing "exit()" followed
137      by <enter> to exit out of Python.  Then, type "exit" at the Shell prompt
138      which should enter Setup where you can use the Boot Maintenance
139      Manager to modify your Console settings.
140
141  NOTE:
142      Some platforms don't include the Setup utility, or don't allow STDERR to
143      be modified.  In these cases, Python may be started with the '-#' option
144      which will cause stderr to be the same as stdout and should allow
145      Python to be used interactively on those platforms.
146
147      Depending upon the version of Shell you are using, it may be necessary
148      to escape the '#' character so that the Shell doesn't interpret it as
149      the start of a comment.  The escape character is '^'.
150      Example:
151          python -^# -V
152
1538. Supported C Modules
154======================
155    Module Name               C File(s)
156  ===============       =============================================
157  _ast                  Python/Python-ast.c
158  _bisect               Modules/_bisectmodule.c
159  _codecs               Modules/_codecsmodule.c
160  _codecs_cn            Modules/cjkcodecs/_codecs_cn.c
161  _codecs_hk            Modules/cjkcodecs/_codecs_hk.c
162  _codecs_iso2022       Modules/cjkcodecs/_codecs_iso2022.c
163  _codecs_jp            Modules/cjkcodecs/_codecs_jp
164  _codecs_kr            Modules/cjkcodecs/_codecs_kr
165  _codecs_tw            Modules/cjkcodecs/_codecs_tw
166  _collections          Modules/_collectionsmodule.c
167  _csv                  Modules/_csv.c
168  _functools            Modules/_functoolsmodule.c
169  _heapq                Modules/_heapqmodule.c
170  _io                   Modules/_io/_iomodule.c       Modules/_io/*
171  _json                 Modules/_json.c
172  _md5                  Modules/md5module.c           Modules/md5.c
173  _multibytecodec       Modules/cjkcodecs/_multibytecodec.c
174  _random               Modules/_randommodule.c
175  _sha                  Modules/shamodule.c
176  _sha256               Modules/sha256module.c
177  _sha512               Modules/sha512module.c
178  _socket               Modules/socketmodule.c
179  _sre                  Modules/_sre.c
180  _struct               Modules/_struct.c
181  _symtable             Modules/symtablemodule.c
182  _weakref              Modules/_weakref.c
183  array                 Modules/arraymodule.c
184  binascii              Modules/binascii.c
185  cmath                 Modules/cmathmodule.c
186  cPickle               Modules/cPickle.c
187  cStringIO             Modules/cStringIO.c
188  datetime              Modules/datetimemodule.c
189  edk2                  Modules/Efi/edk2module.c
190  errno                 Modules/errnomodule.c
191  future_builtins       Modules/future_builtins.c
192  gc                    Modules/gcmodule.c
193  imp                   Python/import.c
194  itertools             Modules/itertoolsmodule.c
195  marshal               Python/marshal.c
196  math                  Modules/mathmodule.c          Modules/_math.c
197  operator              Modules/operator.c
198  parser                Modules/parsermodule.c
199  select                Modules/selectmodule.c
200  signal                Modules/signalmodule.c
201  strop                 Modules/stropmodule.c
202  time                  Modules/timemodule.c
203  xxsubtype             Modules/xxsubtype.c
204  zipimport             Modules/zipimport.c
205  zlib                  Modules/zlibmodule.c          Modules/zlib/*
206
207
2089. Tested Python Library Modules
209================================
210This is a partial list of the packages and modules of the Python Standard
211Library that have been tested or used in some manner.
212
213  encodings               genericpath.py            sha.py
214  importlib               getopt.py                 SimpleHTTPServer.py
215  json                    hashlib.py                site.py
216  pydoc_data              heapq.py                  socket.py
217  xml                     HTMLParser.py             SocketServer.py
218  abc.py                  inspect.py                sre.py
219  argparse.py             io.py                     sre_compile.py
220  ast.py                  keyword.py                sre_constants.py
221  atexit.py               linecache.py              sre_parse.py
222  BaseHTTPServer.py       locale.py                 stat.py
223  binhex.py               md5.py                    string.py
224  bisect.py               modulefinder.py           StringIO.py
225  calendar.py             ntpath.py                 struct.py
226  cmd.py                  numbers.py                textwrap.py
227  codecs.py               optparse.py               token.py
228  collections.py          os.py                     tokenize.py
229  copy.py                 platform.py               traceback.py
230  copy_reg.py             posixpath.py              types.py
231  csv.py                  pydoc.py                  warnings.py
232  dummy_thread.py         random.py                 weakref.py
233  fileinput.py            re.py                     xmllib.py
234  formatter.py            repr.py                   zipfile.py
235  functools.py            runpy.py                  expat
236
237# # #
238