Depending upon the version of Shell you are using, it may be necessary
to escape the '#' character, when using the "-#" command-line option, so that
the Shell doesn't interpret it as the start of a comment.
The escape character is '^'.
Example:
    python -^# -V
* General updating.
* Re-format so that no line is longer than 80 char.
* Add note about escaping the "-#" command-line option.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Daryl McDaniel <edk2-lists@mc2research.org>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19594 6f19259b-4bc3-4df7-8a09-765794883524
		
	
		
			
				
	
	
		
			238 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
                                EDK II Python
 | 
						|
                                   ReadMe
 | 
						|
                                Version 2.7.2
 | 
						|
                                Release 1.02
 | 
						|
                                18 Jan. 2013
 | 
						|
 | 
						|
 | 
						|
1. OVERVIEW
 | 
						|
===========
 | 
						|
This document is devoted to general information on building and setup of the
 | 
						|
Python environment for UEFI 2.3, the invocation of the interpreter, and things
 | 
						|
that make working with Python easier.
 | 
						|
 | 
						|
It is assumed that you already have either UDK2010 or a current snapshot of
 | 
						|
the EDK II sources from www.tianocore.org, and that you can successfully build
 | 
						|
packages within that distribution.
 | 
						|
 | 
						|
2. Release Notes
 | 
						|
================
 | 
						|
  1)  All C extension modules must be statically linked (built in)
 | 
						|
  2)  The site and os modules must exist as discrete files in ...\lib\python.27
 | 
						|
  3)  User-specific configurations are not supported.
 | 
						|
  4)  Environment variables are not supported.
 | 
						|
 | 
						|
3. Getting and Building Python
 | 
						|
======================================================
 | 
						|
  3.1 Getting Python
 | 
						|
  ==================
 | 
						|
  For development ease, a subset of the Python 2.7.2 distribution has been
 | 
						|
  included in the AppPkg source tree.  If a full distribution is desired, the
 | 
						|
  Python-2.7.2 directory can be removed or renamed and the full source code
 | 
						|
  downloaded from http://www.python.org/ftp/python/2.7.2/.
 | 
						|
 | 
						|
  A.  Within your EDK II development tree, extract the Python distribution into
 | 
						|
    AppPkg/Applications/Python.  This should create the
 | 
						|
    AppPkg/Applications/Python/Python-2.7.2 directory.
 | 
						|
 | 
						|
  B.  Copy the files from PyMod-2.7.2 into the corresponding directories within
 | 
						|
    the Python-2.7.2 tree.  This will overwrite existing files with files
 | 
						|
    modified for UEFI usage.
 | 
						|
 | 
						|
  3.2 Building Python
 | 
						|
  ===================
 | 
						|
  A.  Edit Efi/config.c to enable the built-in modules you need.
 | 
						|
        Mandatory Built-in Modules:
 | 
						|
        edk2      errno       imp         marshal
 | 
						|
 | 
						|
      Additional built-in modules which are required to use the help()
 | 
						|
      functionality provided by PyDoc, are:
 | 
						|
        _codecs     _collections    _functools    _random
 | 
						|
        _sre        _struct         _weakref      binascii
 | 
						|
        cStringIO   gc              itertools     math
 | 
						|
        operator    time
 | 
						|
 | 
						|
  B.  Edit AppPkg/AppPkg.dsc to enable (uncomment) the PythonCore.inf line
 | 
						|
    within the [Components] section.
 | 
						|
 | 
						|
  C.  Build AppPkg, which includes Python, using the standard "build" command:
 | 
						|
    For example, to build Python for an X64 CPU architecture:
 | 
						|
                    build -a X64 -p AppPkg\AppPkg.dsc
 | 
						|
 | 
						|
4. Python-related paths and files
 | 
						|
=================================
 | 
						|
Python depends upon the existence of several directories and files on the
 | 
						|
target system.
 | 
						|
 | 
						|
  \EFI                              Root of the UEFI system area.
 | 
						|
   |- \Tools                        Location of the Python.efi executable.
 | 
						|
   |- \Boot                         UEFI specified Boot directory.
 | 
						|
   |- \StdLib                       Root of the Standard Libraries sub-tree.
 | 
						|
       |- \etc                      Configuration files used by libraries.
 | 
						|
       |- \tmp                      Temporary files created by tmpfile(), etc.
 | 
						|
       |- \lib                      Root of the libraries tree.
 | 
						|
           |- \python.27            Directory containing the Python library
 | 
						|
               |                    modules.
 | 
						|
               |- \lib-dynload      Dynamically loadable Python extensions.
 | 
						|
               |- \site-packages    Site-specific packages and modules.
 | 
						|
 | 
						|
 | 
						|
5. Installing Python
 | 
						|
====================
 | 
						|
These directories, on the target system, are populated from the development
 | 
						|
system as follows:
 | 
						|
 | 
						|
  * \Efi\Tools receives a copy of Build/AppPkg/DEBUG_VS2005/X64/Python.efi.
 | 
						|
                                               ^^^^^ ^^^^^^^^^^
 | 
						|
    Modify the host path to match the your build type and compiler.
 | 
						|
 | 
						|
  * The \Efi\StdLib\etc directory is populated from the StdLib/Efi/StdLib/etc
 | 
						|
    source directory.
 | 
						|
 | 
						|
  * Directory \Efi\StdLib\lib\python.27 is populated with packages and modules
 | 
						|
    from the AppPkg/Applications/Python/Python-2.7.2/Lib directory.
 | 
						|
    The recommended minimum set of modules (.py, .pyc, and/or .pyo):
 | 
						|
        os      stat      ntpath      warnings      traceback
 | 
						|
        site    types     copy_reg    linecache     genericpath
 | 
						|
 | 
						|
  * Python C Extension Modules built as dynamically loadable extensions go into
 | 
						|
    the \Efi\StdLib\lib\python.27\lib-dynload directory.  This functionality is
 | 
						|
    not yet implemented.
 | 
						|
 | 
						|
 | 
						|
6. Example: Enabling socket support
 | 
						|
===================================
 | 
						|
  1.  enable {"_socket", init_socket}, in Efi\config.c
 | 
						|
  2.  enable Python-2.7.2/Modules/socketmodule.c in PythonCore.inf.
 | 
						|
  3.  copy socket.py over to /Efi/StdLib/lib/python.27 on your target system.
 | 
						|
  4.  Make sure dependent modules are present(.py) or built in(.c):
 | 
						|
        functools, types, os, sys, warnings, cStringIO, StringIO, errno
 | 
						|
 | 
						|
  5.  build -a X64 -p AppPkg\AppPkg.dsc
 | 
						|
  6.  copy Build\AppPkg\DEBUG_VS2005\X64\Python.efi to \Efi\Tools on your
 | 
						|
      target system. Replace "DEBUG_VS2005\X64", in the source path, with
 | 
						|
      values appropriate for your tool chain and processor architecture.
 | 
						|
 | 
						|
 | 
						|
7. Running Python
 | 
						|
=================
 | 
						|
  Python must currently be run from an EFI FAT-32 partition, or volume, under
 | 
						|
  the UEFI Shell.  At the Shell prompt enter the desired volume name, followed
 | 
						|
  by a colon ':', then press Enter.  Python can then be executed by typing its
 | 
						|
  name, followed by any desired options and arguments.
 | 
						|
 | 
						|
  EXAMPLE:
 | 
						|
      2.0 Shell> fs0:
 | 
						|
      2.0 FS0:\> python
 | 
						|
      Python 2.7.2 (default, Oct 13 2015, 16:21:53) [C] on uefi
 | 
						|
      Type "help", "copyright", "credits" or "license" for more information.
 | 
						|
      >>> exit()
 | 
						|
      2.0 FS0:\>
 | 
						|
 | 
						|
  NOTE:
 | 
						|
      Python, as distributed, sends its interactive prompts to stderr.  If
 | 
						|
      STDERR isn't enabled in UEFI Setup so that it's output goes to the
 | 
						|
      console, it may appear that Python hangs on startup.  If this happens,
 | 
						|
      one may be able to rectify the condition by typing "exit()" followed
 | 
						|
      by <enter> to exit out of Python.  Then, type "exit" at the Shell prompt
 | 
						|
      which should enter Setup where you can use the Boot Maintenance
 | 
						|
      Manager to modify your Console settings.
 | 
						|
 | 
						|
  NOTE:
 | 
						|
      Some platforms don't include the Setup utility, or don't allow STDERR to
 | 
						|
      be modified.  In these cases, Python may be started with the '-#' option
 | 
						|
      which will cause stderr to be the same as stdout and should allow
 | 
						|
      Python to be used interactively on those platforms.
 | 
						|
 | 
						|
      Depending upon the version of Shell you are using, it may be necessary
 | 
						|
      to escape the '#' character so that the Shell doesn't interpret it as
 | 
						|
      the start of a comment.  The escape character is '^'.
 | 
						|
      Example:
 | 
						|
          python -^# -V
 | 
						|
 | 
						|
8. Supported C Modules
 | 
						|
======================
 | 
						|
    Module Name               C File(s)
 | 
						|
  ===============       =============================================
 | 
						|
  _ast                  Python/Python-ast.c
 | 
						|
  _bisect               Modules/_bisectmodule.c
 | 
						|
  _codecs               Modules/_codecsmodule.c
 | 
						|
  _codecs_cn            Modules/cjkcodecs/_codecs_cn.c
 | 
						|
  _codecs_hk            Modules/cjkcodecs/_codecs_hk.c
 | 
						|
  _codecs_iso2022       Modules/cjkcodecs/_codecs_iso2022.c
 | 
						|
  _codecs_jp            Modules/cjkcodecs/_codecs_jp
 | 
						|
  _codecs_kr            Modules/cjkcodecs/_codecs_kr
 | 
						|
  _codecs_tw            Modules/cjkcodecs/_codecs_tw
 | 
						|
  _collections          Modules/_collectionsmodule.c
 | 
						|
  _csv                  Modules/_csv.c
 | 
						|
  _functools            Modules/_functoolsmodule.c
 | 
						|
  _heapq                Modules/_heapqmodule.c
 | 
						|
  _io                   Modules/_io/_iomodule.c       Modules/_io/*
 | 
						|
  _json                 Modules/_json.c
 | 
						|
  _md5                  Modules/md5module.c           Modules/md5.c
 | 
						|
  _multibytecodec       Modules/cjkcodecs/_multibytecodec.c
 | 
						|
  _random               Modules/_randommodule.c
 | 
						|
  _sha                  Modules/shamodule.c
 | 
						|
  _sha256               Modules/sha256module.c
 | 
						|
  _sha512               Modules/sha512module.c
 | 
						|
  _socket               Modules/socketmodule.c
 | 
						|
  _sre                  Modules/_sre.c
 | 
						|
  _struct               Modules/_struct.c
 | 
						|
  _symtable             Modules/symtablemodule.c
 | 
						|
  _weakref              Modules/_weakref.c
 | 
						|
  array                 Modules/arraymodule.c
 | 
						|
  binascii              Modules/binascii.c
 | 
						|
  cmath                 Modules/cmathmodule.c
 | 
						|
  cPickle               Modules/cPickle.c
 | 
						|
  cStringIO             Modules/cStringIO.c
 | 
						|
  datetime              Modules/datetimemodule.c
 | 
						|
  edk2                  Modules/Efi/edk2module.c
 | 
						|
  errno                 Modules/errnomodule.c
 | 
						|
  future_builtins       Modules/future_builtins.c
 | 
						|
  gc                    Modules/gcmodule.c
 | 
						|
  imp                   Python/import.c
 | 
						|
  itertools             Modules/itertoolsmodule.c
 | 
						|
  marshal               Python/marshal.c
 | 
						|
  math                  Modules/mathmodule.c          Modules/_math.c
 | 
						|
  operator              Modules/operator.c
 | 
						|
  parser                Modules/parsermodule.c
 | 
						|
  select                Modules/selectmodule.c
 | 
						|
  signal                Modules/signalmodule.c
 | 
						|
  strop                 Modules/stropmodule.c
 | 
						|
  time                  Modules/timemodule.c
 | 
						|
  xxsubtype             Modules/xxsubtype.c
 | 
						|
  zipimport             Modules/zipimport.c
 | 
						|
  zlib                  Modules/zlibmodule.c          Modules/zlib/*
 | 
						|
 | 
						|
 | 
						|
9. Tested Python Library Modules
 | 
						|
================================
 | 
						|
This is a partial list of the packages and modules of the Python Standard
 | 
						|
Library that have been tested or used in some manner.
 | 
						|
 | 
						|
  encodings               genericpath.py            sha.py
 | 
						|
  importlib               getopt.py                 SimpleHTTPServer.py
 | 
						|
  json                    hashlib.py                site.py
 | 
						|
  pydoc_data              heapq.py                  socket.py
 | 
						|
  xml                     HTMLParser.py             SocketServer.py
 | 
						|
  abc.py                  inspect.py                sre.py
 | 
						|
  argparse.py             io.py                     sre_compile.py
 | 
						|
  ast.py                  keyword.py                sre_constants.py
 | 
						|
  atexit.py               linecache.py              sre_parse.py
 | 
						|
  BaseHTTPServer.py       locale.py                 stat.py
 | 
						|
  binhex.py               md5.py                    string.py
 | 
						|
  bisect.py               modulefinder.py           StringIO.py
 | 
						|
  calendar.py             ntpath.py                 struct.py
 | 
						|
  cmd.py                  numbers.py                textwrap.py
 | 
						|
  codecs.py               optparse.py               token.py
 | 
						|
  collections.py          os.py                     tokenize.py
 | 
						|
  copy.py                 platform.py               traceback.py
 | 
						|
  copy_reg.py             posixpath.py              types.py
 | 
						|
  csv.py                  pydoc.py                  warnings.py
 | 
						|
  dummy_thread.py         random.py                 weakref.py
 | 
						|
  fileinput.py            re.py                     xmllib.py
 | 
						|
  formatter.py            repr.py                   zipfile.py
 | 
						|
  functools.py            runpy.py                  expat
 | 
						|
 | 
						|
# # #
 |