summaryrefslogtreecommitdiffstats
path: root/Doc/using
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/using')
-rw-r--r--Doc/using/cmdline.rst58
-rw-r--r--Doc/using/index.rst2
-rw-r--r--Doc/using/scripts.rst12
-rw-r--r--Doc/using/venv-create.inc85
-rw-r--r--Doc/using/windows.rst300
5 files changed, 415 insertions, 42 deletions
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index cd4d02f..2703684 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -24,7 +24,7 @@ Command line
When invoking Python, you may specify any of these options::
- python [-bBdEhiORqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
+ python [-bBdEhiOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
The most common use case is, of course, a simple invocation of a script::
@@ -229,23 +229,22 @@ Miscellaneous options
.. cmdoption:: -R
- Turn on hash randomization, so that the :meth:`__hash__` values of str, bytes
- and datetime objects are "salted" with an unpredictable random value.
- Although they remain constant within an individual Python process, they are
- not predictable between repeated invocations of Python.
+ Kept for compatibility. On Python 3.3 and greater, hash randomization is
+ turned on by default.
- This is intended to provide protection against a denial-of-service caused by
- carefully-chosen inputs that exploit the worst case performance of a dict
- construction, O(n^2) complexity. See
- http://www.ocert.org/advisories/ocert-2011-003.html for details.
+ On previous versions of Python, this option turns on hash randomization,
+ so that the :meth:`__hash__` values of str, bytes and datetime
+ are "salted" with an unpredictable random value. Although they remain
+ constant within an individual Python process, they are not predictable
+ between repeated invocations of Python.
- Changing hash values affects the order in which keys are retrieved from a
- dict. Although Python has never made guarantees about this ordering (and it
- typically varies between 32-bit and 64-bit builds), enough real-world code
- implicitly relies on this non-guaranteed behavior that the randomization is
- disabled by default.
+ Hash randomization is intended to provide protection against a
+ denial-of-service caused by carefully-chosen inputs that exploit the worst
+ case performance of a dict construction, O(n^2) complexity. See
+ http://www.ocert.org/advisories/ocert-2011-003.html for details.
- See also :envvar:`PYTHONHASHSEED`.
+ :envvar:`PYTHONHASHSEED` allows you to set a fixed value for the hash
+ seed secret.
.. versionadded:: 3.2.3
@@ -263,7 +262,9 @@ Miscellaneous options
.. cmdoption:: -S
Disable the import of the module :mod:`site` and the site-dependent
- manipulations of :data:`sys.path` that it entails.
+ manipulations of :data:`sys.path` that it entails. Also disable these
+ manipulations if :mod:`site` is explicitly imported later (call
+ :func:`site.main` if you want them to be triggered).
.. cmdoption:: -u
@@ -357,7 +358,8 @@ Miscellaneous options
.. cmdoption:: -X
Reserved for various implementation-specific options. CPython currently
- defines none of them, but allows to pass arbitrary values and retrieve
+ defines just one, you can use ``-X faulthander`` to enable
+ :data:`faulthandler`. It also allows to pass arbitrary values and retrieve
them through the :data:`sys._xoptions` dictionary.
.. versionchanged:: 3.2
@@ -475,7 +477,7 @@ conflict.
.. envvar:: PYTHONCASEOK
If this is set, Python ignores case in :keyword:`import` statements. This
- only works on Windows, OS X, and OS/2.
+ only works on Windows and OS X.
.. envvar:: PYTHONDONTWRITEBYTECODE
@@ -487,9 +489,8 @@ conflict.
.. envvar:: PYTHONHASHSEED
- If this variable is set to ``random``, the effect is the same as specifying
- the :option:`-R` option: a random value is used to seed the hashes of str,
- bytes and datetime objects.
+ If this variable is not set or set to ``random``, a random value is used
+ to seed the hashes of str, bytes and datetime objects.
If :envvar:`PYTHONHASHSEED` is set to an integer value, it is used as a fixed
seed for generating the hash() of the types covered by the hash
@@ -500,8 +501,7 @@ conflict.
values.
The integer must be a decimal number in the range [0,4294967295]. Specifying
- the value 0 will lead to the same hash values as when hash randomization is
- disabled.
+ the value 0 will disable hash randomization.
.. versionadded:: 3.2.3
@@ -531,8 +531,8 @@ conflict.
Defines the :data:`user base directory <site.USER_BASE>`, which is used to
compute the path of the :data:`user site-packages directory <site.USER_SITE>`
- and :ref:`Distutils installation paths <inst-alt-install-user>` for ``python
- setup.py install --user``.
+ and :ref:`Distutils installation paths <inst-alt-install-user>` for
+ ``python setup.py install --user``.
.. seealso::
@@ -551,6 +551,14 @@ conflict.
separated string, it is equivalent to specifying :option:`-W` multiple
times.
+.. envvar:: PYTHONFAULTHANDLER
+
+ If this environment variable is set, :func:`faulthandler.enable` is called
+ at startup: install a handler for :const:`SIGSEGV`, :const:`SIGFPE`,
+ :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL` signals to dump the
+ Python traceback. This is equivalent to :option:`-X` ``faulthandler``
+ option.
+
Debug-mode variables
~~~~~~~~~~~~~~~~~~~~
diff --git a/Doc/using/index.rst b/Doc/using/index.rst
index 1201153..502afa9 100644
--- a/Doc/using/index.rst
+++ b/Doc/using/index.rst
@@ -17,4 +17,4 @@ interpreter and things that make working with Python easier.
unix.rst
windows.rst
mac.rst
-
+ scripts.rst
diff --git a/Doc/using/scripts.rst b/Doc/using/scripts.rst
new file mode 100644
index 0000000..2c87416
--- /dev/null
+++ b/Doc/using/scripts.rst
@@ -0,0 +1,12 @@
+.. _tools-and-scripts:
+
+Additional Tools and Scripts
+============================
+
+.. _scripts-pyvenv:
+
+pyvenv - Creating virtual environments
+--------------------------------------
+
+.. include:: venv-create.inc
+
diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc
new file mode 100644
index 0000000..5fdbc9b
--- /dev/null
+++ b/Doc/using/venv-create.inc
@@ -0,0 +1,85 @@
+Creation of :ref:`virtual environments <venv-def>` is done by executing the
+``pyvenv`` script::
+
+ pyvenv /path/to/new/virtual/environment
+
+Running this command creates the target directory (creating any parent
+directories that don't exist already) and places a ``pyvenv.cfg`` file in it
+with a ``home`` key pointing to the Python installation the command was run
+from. It also creates a ``bin`` (or ``Scripts`` on Windows) subdirectory
+containing a copy of the ``python`` binary (or binaries, in the case of
+Windows). It also creates an (initially empty) ``lib/pythonX.Y/site-packages``
+subdirectory (on Windows, this is ``Lib\site-packages``).
+
+.. highlight:: none
+
+On Windows, you may have to invoke the ``pyvenv`` script as follows, if you
+don't have the relevant PATH and PATHEXT settings::
+
+ c:\Temp>c:\Python33\python c:\Python33\Tools\Scripts\pyvenv.py myenv
+
+or equivalently::
+
+ c:\Temp>c:\Python33\python -m venv myenv
+
+The command, if run with ``-h``, will show the available options::
+
+ usage: pyvenv [-h] [--system-site-packages] [--symlinks] [--clear]
+ [--upgrade] ENV_DIR [ENV_DIR ...]
+
+ Creates virtual Python environments in one or more target directories.
+
+ positional arguments:
+ ENV_DIR A directory to create the environment in.
+
+ optional arguments:
+ -h, --help show this help message and exit
+ --system-site-packages Give access to the global site-packages dir to the
+ virtual environment.
+ --symlinks Try to use symlinks rather than copies, when symlinks
+ are not the default for the platform.
+ --clear Delete the environment directory if it already exists.
+ If not specified and the directory exists, an error is
+ raised.
+ --upgrade Upgrade the environment directory to use this version
+ of Python, assuming Python has been upgraded in-place.
+
+If the target directory already exists an error will be raised, unless
+the ``--clear`` or ``--upgrade`` option was provided.
+
+The created ``pyvenv.cfg`` file also includes the
+``include-system-site-packages`` key, set to ``true`` if ``venv`` is
+run with the ``--system-site-packages`` option, ``false`` otherwise.
+
+Multiple paths can be given to ``pyvenv``, in which case an identical
+virtualenv will be created, according to the given options, at each
+provided path.
+
+Once a venv has been created, it can be "activated" using a script in the
+venv's binary directory. The invocation of the script is platform-specific: on
+a Posix platform, you would typically do::
+
+ $ source <venv>/bin/activate
+
+whereas on Windows, you might do::
+
+ C:\> <venv>/Scripts/activate
+
+if you are using the ``cmd.exe`` shell, or perhaps::
+
+ PS C:\> <venv>/Scripts/Activate.ps1
+
+if you use PowerShell.
+
+You don't specifically *need* to activate an environment; activation just
+prepends the venv's binary directory to your path, so that "python" invokes the
+venv's Python interpreter and you can run installed scripts without having to
+use their full path. However, all scripts installed in a venv should be
+runnable without activating it, and run with the venv's Python automatically.
+
+You can deactivate a venv by typing "deactivate" in your shell. The exact
+mechanism is platform-specific: for example, the Bash activation script defines
+a "deactivate" function, whereas on Windows there are separate scripts called
+``deactivate.bat`` and ``Deactivate.ps1`` which are installed when the venv is
+created.
+
diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst
index 742a290..ae25215 100644
--- a/Doc/using/windows.rst
+++ b/Doc/using/windows.rst
@@ -82,6 +82,8 @@ In order to run Python flawlessly, you might have to change certain environment
settings in Windows.
+.. _setting-envvars:
+
Excursus: Setting environment variables
---------------------------------------
@@ -130,21 +132,33 @@ Consult :command:`set /?` for details on this behaviour.
Setting Environment variables, Louis J. Farrugia
+.. _windows-path-mod:
+
Finding the Python executable
-----------------------------
+.. versionchanged:: 3.3
+
Besides using the automatically created start menu entry for the Python
-interpreter, you might want to start Python in the DOS prompt. To make this
-work, you need to set your :envvar:`%PATH%` environment variable to include the
-directory of your Python distribution, delimited by a semicolon from other
-entries. An example variable could look like this (assuming the first two
-entries are Windows' default)::
+interpreter, you might want to start Python in the command prompt. As of
+Python 3.3, the installer has an option to set that up for you.
- C:\WINDOWS\system32;C:\WINDOWS;C:\Python25
+At the "Customize Python 3.3" screen, an option called
+"Add python.exe to search path" can be enabled to have the installer place
+your installation into the :envvar:`%PATH%`. This allows you to type
+:command:`python` to run the interpreter. Thus, you can also execute your
+scripts with command line options, see :ref:`using-on-cmdline` documentation.
-Typing :command:`python` on your command prompt will now fire up the Python
-interpreter. Thus, you can also execute your scripts with command line options,
-see :ref:`using-on-cmdline` documentation.
+If you don't enable this option at install time, you can always re-run the
+installer to choose it.
+
+The alternative is manually modifying the :envvar:`%PATH%` using the
+directions in :ref:`setting-envvars`. You need to set your :envvar:`%PATH%`
+environment variable to include the directory of your Python distribution,
+delimited by a semicolon from other entries. An example variable could look
+like this (assuming the first two entries are Windows' default)::
+
+ C:\WINDOWS\system32;C:\WINDOWS;C:\Python33
Finding modules
@@ -203,13 +217,19 @@ The end result of all this is:
Executing scripts
-----------------
-Python scripts (files with the extension ``.py``) will be executed by
-:program:`python.exe` by default. This executable opens a terminal, which stays
-open even if the program uses a GUI. If you do not want this to happen, use the
-extension ``.pyw`` which will cause the script to be executed by
-:program:`pythonw.exe` by default (both executables are located in the top-level
-of your Python installation directory). This suppresses the terminal window on
-startup.
+As of Python 3.3, Python includes a launcher which facilitates running Python
+scripts. See :ref:`launcher` for more information.
+
+Executing scripts without the Python launcher
+---------------------------------------------
+
+Without the Python launcher installed, Python scripts (files with the extension
+``.py``) will be executed by :program:`python.exe` by default. This executable
+opens a terminal, which stays open even if the program uses a GUI. If you do
+not want this to happen, use the extension ``.pyw`` which will cause the script
+to be executed by :program:`pythonw.exe` by default (both executables are
+located in the top-level of your Python installation directory). This
+suppresses the terminal window on startup.
You can also make all ``.py`` scripts execute with :program:`pythonw.exe`,
setting this through the usual facilities, for example (might require
@@ -225,6 +245,250 @@ administrative rights):
ftype Python.File=C:\Path\to\pythonw.exe "%1" %*
+.. _launcher:
+
+Python Launcher for Windows
+===========================
+
+.. versionadded:: 3.3
+
+The Python launcher for Windows is a utility which aids in the location and
+execution of different Python versions. It allows scripts (or the
+command-line) to indicate a preference for a specific Python version, and
+will locate and execute that version.
+
+Getting started
+---------------
+
+From the command-line
+^^^^^^^^^^^^^^^^^^^^^
+
+You should ensure the launcher is on your PATH - depending on how it was
+installed it may already be there, but check just in case it is not.
+
+From a command-prompt, execute the following command:
+
+::
+
+ py
+
+You should find that the latest version of Python 2.x you have installed is
+started - it can be exited as normal, and any additional command-line
+arguments specified will be sent directly to Python.
+
+If you have multiple versions of Python 2.x installed (e.g., 2.6 and 2.7) you
+will have noticed that Python 2.7 was started - to launch Python 2.6, try the
+command:
+
+::
+
+ py -2.6
+
+If you have a Python 3.x installed, try the command:
+
+::
+
+ py -3
+
+You should find the latest version of Python 3.x starts.
+
+From a script
+^^^^^^^^^^^^^
+
+Let's create a test Python script - create a file called ``hello.py`` with the
+following contents
+
+::
+
+ #! python
+ import sys
+ sys.stdout.write("hello from Python %s\n" % (sys.version,))
+
+From the directory in which hello.py lives, execute the command:
+
+::
+
+ py hello.py
+
+You should notice the version number of your latest Python 2.x installation
+is printed. Now try changing the first line to be:
+
+::
+
+ #! python3
+
+Re-executing the command should now print the latest Python 3.x information.
+As with the above command-line examples, you can specify a more explicit
+version qualifier. Assuming you have Python 2.6 installed, try changing the
+first line to ``#! python2.6`` and you should find the 2.6 version
+information printed.
+
+From file associations
+^^^^^^^^^^^^^^^^^^^^^^
+
+The launcher should have been associated with Python files (i.e. ``.py``,
+``.pyw``, ``.pyc``, ``.pyo`` files) when it was installed. This means that
+when you double-click on one of these files from Windows explorer the launcher
+will be used, and therefore you can use the same facilities described above to
+have the script specify the version which should be used.
+
+The key benefit of this is that a single launcher can support multiple Python
+versions at the same time depending on the contents of the first line.
+
+Shebang Lines
+-------------
+
+If the first line of a script file starts with ``#!``, it is known as a
+"shebang" line. Linux and other Unix like operating systems have native
+support for such lines and are commonly used on such systems to indicate how
+a script should be executed. This launcher allows the same facilities to be
+using with Python scripts on Windows and the examples above demonstrate their
+use.
+
+To allow shebang lines in Python scripts to be portable between Unix and
+Windows, this launcher supports a number of 'virtual' commands to specify
+which interpreter to use. The supported virtual commands are:
+
+* ``/usr/bin/env python``
+* ``/usr/bin/python``
+* ``/usr/local/bin/python``
+* ``python``
+
+For example, if the first line of your script starts with
+
+::
+
+ #! /usr/bin/python
+
+The default Python will be located and used. As many Python scripts written
+to work on Unix will already have this line, you should find these scripts can
+be used by the launcher without modification. If you are writing a new script
+on Windows which you hope will be useful on Unix, you should use one of the
+shebang lines starting with ``/usr``.
+
+Arguments in shebang lines
+--------------------------
+
+The shebang lines can also specify additional options to be passed to the
+Python interpreter. For example, if you have a shebang line:
+
+::
+
+ #! /usr/bin/python -v
+
+Then Python will be started with the ``-v`` option
+
+Customization
+-------------
+
+Customization via INI files
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ Two .ini files will be searched by the launcher - ``py.ini`` in the
+ current user's "application data" directory (i.e. the directory returned
+ by calling the Windows function SHGetFolderPath with CSIDL_LOCAL_APPDATA)
+ and ``py.ini`` in the same directory as the launcher. The same .ini
+ files are used for both the 'console' version of the launcher (i.e.
+ py.exe) and for the 'windows' version (i.e. pyw.exe)
+
+ Customization specified in the "application directory" will have
+ precedence over the one next to the executable, so a user, who may not
+ have write access to the .ini file next to the launcher, can override
+ commands in that global .ini file)
+
+Customizing default Python versions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In some cases, a version qualifier can be included in a command to dictate
+which version of Python will be used by the command. A version qualifier
+starts with a major version number and can optionally be followed by a period
+('.') and a minor version specifier. If the minor qualifier is specified, it
+may optionally be followed by "-32" to indicate the 32-bit implementation of
+that version be used.
+
+For example, a shebang line of ``#!python`` has no version qualifier, while
+``#!python3`` has a version qualifier which specifies only a major version.
+
+If no version qualifiers are found in a command, the environment variable
+``PY_PYTHON`` can be set to specify the default version qualifier - the default
+value is "2". Note this value could specify just a major version (e.g. "2") or
+a major.minor qualifier (e.g. "2.6"), or even major.minor-32.
+
+If no minor version qualifiers are found, the environment variable
+``PY_PYTHON{major}`` (where ``{major}`` is the current major version qualifier
+as determined above) can be set to specify the full version. If no such option
+is found, the launcher will enumerate the installed Python versions and use
+the latest minor release found for the major version, which is likely,
+although not guaranteed, to be the most recently installed version in that
+family.
+
+On 64-bit Windows with both 32-bit and 64-bit implementations of the same
+(major.minor) Python version installed, the 64-bit version will always be
+preferred. This will be true for both 32-bit and 64-bit implementations of the
+launcher - a 32-bit launcher will prefer to execute a 64-bit Python installation
+of the specified version if available. This is so the behavior of the launcher
+can be predicted knowing only what versions are installed on the PC and
+without regard to the order in which they were installed (i.e., without knowing
+whether a 32 or 64-bit version of Python and corresponding launcher was
+installed last). As noted above, an optional "-32" suffix can be used on a
+version specifier to change this behaviour.
+
+Examples:
+
+* If no relevant options are set, the commands ``python`` and
+ ``python2`` will use the latest Python 2.x version installed and
+ the command ``python3`` will use the latest Python 3.x installed.
+
+* The commands ``python3.1`` and ``python2.7`` will not consult any
+ options at all as the versions are fully specified.
+
+* If ``PY_PYTHON=3``, the commands ``python`` and ``python3`` will both use
+ the latest installed Python 3 version.
+
+* If ``PY_PYTHON=3.1-32``, the command ``python`` will use the 32-bit
+ implementation of 3.1 whereas the command ``python3`` will use the latest
+ installed Python (PY_PYTHON was not considered at all as a major
+ version was specified.)
+
+* If ``PY_PYTHON=3`` and ``PY_PYTHON3=3.1``, the commands
+ ``python`` and ``python3`` will both use specifically 3.1
+
+In addition to environment variables, the same settings can be configured
+in the .INI file used by the launcher. The section in the INI file is
+called ``[defaults]`` and the key name will be the same as the
+environment variables without the leading ``PY_`` prefix (and note that
+the key names in the INI file are case insensitive.) The contents of
+an environment variable will override things specified in the INI file.
+
+For example:
+
+* Setting ``PY_PYTHON=3.1`` is equivalent to the INI file containing:
+
+::
+
+ [defaults]
+ python=3.1
+
+* Setting ``PY_PYTHON=3`` and ``PY_PYTHON3=3.1`` is equivalent to the INI file
+ containing:
+
+::
+
+ [defaults]
+ python=3
+ python3=3.1
+
+Diagnostics
+-----------
+
+If an environment variable ``PYLAUNCH_DEBUG`` is set (to any value), the
+launcher will print diagnostic information to stderr (i.e. to the console).
+While this information manages to be simultaneously verbose *and* terse, it
+should allow you to see what versions of Python were located, why a
+particular version was chosen and the exact command-line used to execute the
+target Python.
+
+
Additional modules
==================
@@ -341,3 +605,7 @@ Other resources
`A Python for Windows Tutorial <http://www.imladris.com/Scripts/PythonForWindows.html>`_
by Amanda Birmingham, 2004
+ :pep:`397` - Python launcher for Windows
+ The proposal for the launcher to be included in the Python distribution.
+
+