• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1                                EDK II Python
2                                   ReadMe
3                                Version 2.7.10
4                                 Release 1.00
5                                  3 Nov. 2015
6
7
81. OVERVIEW
9===========
10This document is devoted to general information on building and setup of the
11Python environment for UEFI, the invocation of the interpreter, and things
12that make working with Python easier.
13
14It is assumed that you already have UDK2010 or later, 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\python27.10
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  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.
33
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/.
39
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
45
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.
49
50  3.2 Building Python
51  ===================
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
57    modified.
58
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
63
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
69        operator    time
70
71  C.  Edit AppPkg/AppPkg.dsc to enable (uncomment) the Python2710.inf line
72    within the [Components] section.
73
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
77
784. Python-related paths and files
79=================================
80Python depends upon the existence of several directories and files on the
81target system.
82
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
91               |                    modules.
92               |- \lib-dynload      Dynamically loadable Python extensions.
93               |- \site-packages    Site-specific packages and modules.
94
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
97        version 2.7.2.
98
995. Installing Python
100====================
101These directories, on the target system, are populated from the development
102system as follows:
103
104  * \Efi\Tools receives a copy of Build/AppPkg/DEBUG_VS2015/X64/Python2710.efi.
105                                               ^^^^^^^^^^^^^^^^
106    Modify the host path to match your build type and compiler.
107
108  * The \Efi\StdLib\etc directory is populated from the StdLib/Efi/StdLib/etc
109    source directory.
110
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
116
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
119    yet implemented.
120
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.
128
1296. 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.
133  3.  Build Python2710
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.
138
1397. Running Python
140=================
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.
145
146  EXAMPLE:
147      2.0 Shell> fs0:
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.
151      >>> exit()
152      2.0 FS0:\>
153
154  NOTE:
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.
162
163  NOTE:
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.
168
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 '^'.
172      Example:
173          python -^# -V
174
1758. 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
189  _csv                  Modules/_csv.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
201  _sre                  Modules/_sre.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
215  imp                   Python/import.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/*
228
229
2309. Tested Python Library Modules
231================================
232This is a partial list of the packages and modules of the Python Standard
233Library that have been tested or used in some manner.
234
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
258
259# # #
260