blob: 7d8b31f74b69dbe6275a52c182d49d9cfcd18023 [file] [log] [blame]
EDK II Python
ReadMe
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
==================
Currently only version 2.7.2 of the CPython distribution is supported. 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.
^^^^ Modify as needed
7. 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/*
8. 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
# # #