Поиск по блогу

вторник, 29 апреля 2014 г.

Распечатаем справку и переменные среды из sys.path и Windows 8 (PATH, SET, SYSTEMINFO)

Процедура формирования переменных окружения Python - это песня акына на английском языке (os.py). Сначала я нашел (и скопировал сюда) все способы работы с переменными окружения Windows, а потом прочитал про то, что вытворяет Python, но начинать читаь лучше с "how sys.path is populated on Windows"... А примеры решений в ссылке "How to add to the pythonpath in windows 7?"
Как сделать так, чтобы не было проблем с запуском программ, импортом модулей (Anaconda, дополнительных, таких, как scrapy в мои пакеты которые я устанавливаю в других папках компьютера... Например, как работать с сайтами Django? Самый простой вариант - создать переменную PYTHONPATH, а в ней через точку с запятой перечислить все "нужные пути" пути. Это аналог переменной PATH в Windows. Python формирует переменные окружения для каждого скрипта. Он ищет модули в локальной папке (откуда запущен скрипт), среди глобальных переменных path, pythonpath (в Windows регистр не важен, потому можно маленькими буквами) и формирует пути поиска модулей, их можно посмотреть при помощи команды sys.path. Очередность обхода папок windows зависит от нескольких параметров. Как и каких? Не знаю, но при случае разберусь, поскольку ниже собрал все необходимое для этого.
На изучение мануалов (три ссылки внизу) я вчера угрохал пол-дня. А первые пол-дня ушли на экзерсисы с мануалом Django ... Там есть важное замечание о том, что в Linux нужно использовать symlinks django-admin.py and manage.py, дабы избежать мучений с путями...

Первоисточники и ссылки

При формировании переменных окружения Python

Python usually stores its library (and thereby your site-packages folder) in the installation directory. So, if you had installed Python to **C:**, the default library would reside in C: and third-party modules should be stored in **C:-packages**.

This is how sys.path is populated on Windows:

An empty entry is added at the start, which corresponds to the current directory.
If the environment variable PYTHONPATH exists, as described in Environment variables, its entries are added next. Note that on Windows, paths in this variable must be separated by semicolons, to distinguish them from the colon used in drive identifiers (C: etc.).
Additional “application paths” can be added in the registry as subkeys of * under both the HKEY_CURRENT_USER** and HKEY_LOCAL_MACHINE hives.
Subkeys which have semicolon-delimited path strings as their default value will cause each path to be added to sys.path. (Note that all known installers only use HKLM, so HKCU is typically empty.)
If the environment variable PYTHONHOME is set, it is assumed as “Python Home”. Otherwise, the path of the main Python executable is used to locate a “landmark file” (Lib.py) to deduce the “Python Home”.
If a Python home is found, the relevant sub-directories added to sys.path (Lib, plat-win, etc) are based on that folder.
Otherwise, the core Python path is constructed from the PythonPath stored in the registry.
If the Python Home cannot be located, no PYTHONPATH is specified in the environment, and no registry entries can be found, a default path with relative entries is used (e.g. .;.-win, etc).

The end result of all this is:

When running python.exe, or any other .exe in the main Python directory (either an installed version, or directly from the PCbuild directory), the core path is deduced, and the core paths in the registry are ignored.
Other “application paths” in the registry are always read.
When Python is hosted in another .exe (different directory, embedded via COM, etc), the “Python Home” will not be deduced, so the core path from the registry is used.
Other “application paths” in the registry are always read.
If Python can’t find its home and there is no registry (eg, frozen .exe, some very strange installation setup) you get a path with some default, but relative, paths.
In [10]:
import sys
In [12]:
sys.path
Out[12]:
['',
 'C:\\Users\\kiss\\Anaconda\\python27.zip',
 'C:\\Users\\kiss\\Anaconda\\DLLs',
 'C:\\Users\\kiss\\Anaconda\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\plat-win',
 'C:\\Users\\kiss\\Anaconda\\lib\\lib-tk',
 'C:\\Users\\kiss\\Anaconda',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\PIL',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\setuptools-2.2-py2.7.egg',
 'C:\\Users\\kiss\\Anaconda\\lib\\site-packages\\IPython\\extensions']
In [13]:
%load C:\\Users\\kiss\\Anaconda\\Lib\\os.py
In []:
r"""OS routines for Mac, NT, or Posix depending on what system we're on.

This exports:
  - all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.
  - os.path is one of the modules posixpath, or ntpath
  - os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'
  - os.curdir is a string representing the current directory ('.' or ':')
  - os.pardir is a string representing the parent directory ('..' or '::')
  - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
  - os.extsep is the extension separator ('.' or '/')
  - os.altsep is the alternate pathname separator (None or '/')
  - os.pathsep is the component separator used in $PATH etc
  - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n')
  - os.defpath is the default search path for executables
  - os.devnull is the file path of the null device ('/dev/null', etc.)

Programs that import and use 'os' stand a better chance of being
portable between different platforms.  Of course, they must then
only use functions that are defined by all platforms (e.g., unlink
and opendir), and leave all pathname manipulation to os.path
(e.g., split and join).
"""

#'

import sys, errno

_names = sys.builtin_module_names

# Note:  more names are added to __all__ later.
__all__ = ["altsep", "curdir", "pardir", "sep", "extsep", "pathsep", "linesep",
           "defpath", "name", "path", "devnull",
           "SEEK_SET", "SEEK_CUR", "SEEK_END"]

def _get_exports_list(module):
    try:
        return list(module.__all__)
    except AttributeError:
        return [n for n in dir(module) if n[0] != '_']

if 'posix' in _names:
    name = 'posix'
    linesep = '\n'
    from posix import *
    try:
        from posix import _exit
    except ImportError:
        pass
    import posixpath as path

    import posix
    __all__.extend(_get_exports_list(posix))
    del posix

elif 'nt' in _names:
    name = 'nt'
    linesep = '\r\n'
    from nt import *
    try:
        from nt import _exit
    except ImportError:
        pass
    import ntpath as path

    import nt
    __all__.extend(_get_exports_list(nt))
    del nt

elif 'os2' in _names:
    name = 'os2'
    linesep = '\r\n'
    from os2 import *
    try:
        from os2 import _exit
    except ImportError:
        pass
    if sys.version.find('EMX GCC') == -1:
        import ntpath as path
    else:
        import os2emxpath as path
        from _emx_link import link

    import os2
    __all__.extend(_get_exports_list(os2))
    del os2

elif 'ce' in _names:
    name = 'ce'
    linesep = '\r\n'
    from ce import *
    try:
        from ce import _exit
    except ImportError:
        pass
    # We can use the standard Windows path.
    import ntpath as path

    import ce
    __all__.extend(_get_exports_list(ce))
    del ce

elif 'riscos' in _names:
    name = 'riscos'
    linesep = '\n'
    from riscos import *
    try:
        from riscos import _exit
    except ImportError:
        pass
    import riscospath as path

    import riscos
    __all__.extend(_get_exports_list(riscos))
    del riscos

else:
    raise ImportError, 'no os specific module found'

sys.modules['os.path'] = path
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
    devnull)

del _names

# Python uses fixed values for the SEEK_ constants; they are mapped
# to native constants if necessary in posixmodule.c
SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2

#'

# Super directory utilities.
# (Inspired by Eric Raymond; the doc strings are mostly his)

def makedirs(name, mode=0777):
    """makedirs(path [, mode=0777])

    Super-mkdir; create a leaf directory and all intermediate ones.
    Works like mkdir, except that any intermediate path segment (not
    just the rightmost) will be created if it does not exist.  This is
    recursive.

    """
    head, tail = path.split(name)
    if not tail:
        head, tail = path.split(head)
    if head and tail and not path.exists(head):
        try:
            makedirs(head, mode)
        except OSError, e:
            # be happy if someone already created the path
            if e.errno != errno.EEXIST:
                raise
        if tail == curdir:           # xxx/newdir/. exists if xxx/newdir exists
            return
    mkdir(name, mode)

def removedirs(name):
    """removedirs(path)

    Super-rmdir; remove a leaf directory and all empty intermediate
    ones.  Works like rmdir except that, if the leaf directory is
    successfully removed, directories corresponding to rightmost path
    segments will be pruned away until either the whole path is
    consumed or an error occurs.  Errors during this latter phase are
    ignored -- they generally mean that a directory was not empty.

    """
    rmdir(name)
    head, tail = path.split(name)
    if not tail:
        head, tail = path.split(head)
    while head and tail:
        try:
            rmdir(head)
        except error:
            break
        head, tail = path.split(head)

def renames(old, new):
    """renames(old, new)

    Super-rename; create directories as necessary and delete any left
    empty.  Works like rename, except creation of any intermediate
    directories needed to make the new pathname good is attempted
    first.  After the rename, directories corresponding to rightmost
    path segments of the old name will be pruned way until either the
    whole path is consumed or a nonempty directory is found.

    Note: this function can fail with the new directory structure made
    if you lack permissions needed to unlink the leaf directory or
    file.

    """
    head, tail = path.split(new)
    if head and tail and not path.exists(head):
        makedirs(head)
    rename(old, new)
    head, tail = path.split(old)
    if head and tail:
        try:
            removedirs(head)
        except error:
            pass

__all__.extend(["makedirs", "removedirs", "renames"])

def walk(top, topdown=True, onerror=None, followlinks=False):
    """Directory tree generator.

    For each directory in the directory tree rooted at top (including top
    itself, but excluding '.' and '..'), yields a 3-tuple

        dirpath, dirnames, filenames

    dirpath is a string, the path to the directory.  dirnames is a list of
    the names of the subdirectories in dirpath (excluding '.' and '..').
    filenames is a list of the names of the non-directory files in dirpath.
    Note that the names in the lists are just names, with no path components.
    To get a full path (which begins with top) to a file or directory in
    dirpath, do os.path.join(dirpath, name).

    If optional arg 'topdown' is true or not specified, the triple for a
    directory is generated before the triples for any of its subdirectories
    (directories are generated top down).  If topdown is false, the triple
    for a directory is generated after the triples for all of its
    subdirectories (directories are generated bottom up).

    When topdown is true, the caller can modify the dirnames list in-place
    (e.g., via del or slice assignment), and walk will only recurse into the
    subdirectories whose names remain in dirnames; this can be used to prune
    the search, or to impose a specific order of visiting.  Modifying
    dirnames when topdown is false is ineffective, since the directories in
    dirnames have already been generated by the time dirnames itself is
    generated.

    By default errors from the os.listdir() call are ignored.  If
    optional arg 'onerror' is specified, it should be a function; it
    will be called with one argument, an os.error instance.  It can
    report the error to continue with the walk, or raise the exception
    to abort the walk.  Note that the filename is available as the
    filename attribute of the exception object.

    By default, os.walk does not follow symbolic links to subdirectories on
    systems that support them.  In order to get this functionality, set the
    optional argument 'followlinks' to true.

    Caution:  if you pass a relative pathname for top, don't change the
    current working directory between resumptions of walk.  walk never
    changes the current directory, and assumes that the client doesn't
    either.

    Example:

    import os
    from os.path import join, getsize
    for root, dirs, files in os.walk('python/Lib/email'):
        print root, "consumes",
        print sum([getsize(join(root, name)) for name in files]),
        print "bytes in", len(files), "non-directory files"
        if 'CVS' in dirs:
            dirs.remove('CVS')  # don't visit CVS directories
    """

    islink, join, isdir = path.islink, path.join, path.isdir

    # We may not have read permission for top, in which case we can't
    # get a list of the files the directory contains.  os.path.walk
    # always suppressed the exception then, rather than blow up for a
    # minor reason when (say) a thousand readable directories are still
    # left to visit.  That logic is copied here.
    try:
        # Note that listdir and error are globals in this module due
        # to earlier import-*.
        names = listdir(top)
    except error, err:
        if onerror is not None:
            onerror(err)
        return

    dirs, nondirs = [], []
    for name in names:
        if isdir(join(top, name)):
            dirs.append(name)
        else:
            nondirs.append(name)

    if topdown:
        yield top, dirs, nondirs
    for name in dirs:
        new_path = join(top, name)
        if followlinks or not islink(new_path):
            for x in walk(new_path, topdown, onerror, followlinks):
                yield x
    if not topdown:
        yield top, dirs, nondirs

__all__.append("walk")

# Make sure os.environ exists, at least
try:
    environ
except NameError:
    environ = {}

def execl(file, *args):
    """execl(file, *args)

    Execute the executable file with argument list args, replacing the
    current process. """
    execv(file, args)

def execle(file, *args):
    """execle(file, *args, env)

    Execute the executable file with argument list args and
    environment env, replacing the current process. """
    env = args[-1]
    execve(file, args[:-1], env)

def execlp(file, *args):
    """execlp(file, *args)

    Execute the executable file (which is searched for along $PATH)
    with argument list args, replacing the current process. """
    execvp(file, args)

def execlpe(file, *args):
    """execlpe(file, *args, env)

    Execute the executable file (which is searched for along $PATH)
    with argument list args and environment env, replacing the current
    process. """
    env = args[-1]
    execvpe(file, args[:-1], env)

def execvp(file, args):
    """execvp(file, args)

    Execute the executable file (which is searched for along $PATH)
    with argument list args, replacing the current process.
    args may be a list or tuple of strings. """
    _execvpe(file, args)

def execvpe(file, args, env):
    """execvpe(file, args, env)

    Execute the executable file (which is searched for along $PATH)
    with argument list args and environment env , replacing the
    current process.
    args may be a list or tuple of strings. """
    _execvpe(file, args, env)

__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"])

def _execvpe(file, args, env=None):
    if env is not None:
        func = execve
        argrest = (args, env)
    else:
        func = execv
        argrest = (args,)
        env = environ

    head, tail = path.split(file)
    if head:
        func(file, *argrest)
        return
    if 'PATH' in env:
        envpath = env['PATH']
    else:
        envpath = defpath
    PATH = envpath.split(pathsep)
    saved_exc = None
    saved_tb = None
    for dir in PATH:
        fullname = path.join(dir, file)
        try:
            func(fullname, *argrest)
        except error, e:
            tb = sys.exc_info()[2]
            if (e.errno != errno.ENOENT and e.errno != errno.ENOTDIR
                and saved_exc is None):
                saved_exc = e
                saved_tb = tb
    if saved_exc:
        raise error, saved_exc, saved_tb
    raise error, e, tb

# Change environ to automatically call putenv() if it exists
try:
    # This will fail if there's no putenv
    putenv
except NameError:
    pass
else:
    import UserDict

    # Fake unsetenv() for Windows
    # not sure about os2 here but
    # I'm guessing they are the same.

    if name in ('os2', 'nt'):
        def unsetenv(key):
            putenv(key, "")

    if name == "riscos":
        # On RISC OS, all env access goes through getenv and putenv
        from riscosenviron import _Environ
    elif name in ('os2', 'nt'):  # Where Env Var Names Must Be UPPERCASE
        # But we store them as upper case
        class _Environ(UserDict.IterableUserDict):
            def __init__(self, environ):
                UserDict.UserDict.__init__(self)
                data = self.data
                for k, v in environ.items():
                    data[k.upper()] = v
            def __setitem__(self, key, item):
                putenv(key, item)
                self.data[key.upper()] = item
            def __getitem__(self, key):
                return self.data[key.upper()]
            try:
                unsetenv
            except NameError:
                def __delitem__(self, key):
                    del self.data[key.upper()]
            else:
                def __delitem__(self, key):
                    unsetenv(key)
                    del self.data[key.upper()]
                def clear(self):
                    for key in self.data.keys():
                        unsetenv(key)
                        del self.data[key]
                def pop(self, key, *args):
                    unsetenv(key)
                    return self.data.pop(key.upper(), *args)
            def has_key(self, key):
                return key.upper() in self.data
            def __contains__(self, key):
                return key.upper() in self.data
            def get(self, key, failobj=None):
                return self.data.get(key.upper(), failobj)
            def update(self, dict=None, **kwargs):
                if dict:
                    try:
                        keys = dict.keys()
                    except AttributeError:
                        # List of (key, value)
                        for k, v in dict:
                            self[k] = v
                    else:
                        # got keys
                        # cannot use items(), since mappings
                        # may not have them.
                        for k in keys:
                            self[k] = dict[k]
                if kwargs:
                    self.update(kwargs)
            def copy(self):
                return dict(self)

    else:  # Where Env Var Names Can Be Mixed Case
        class _Environ(UserDict.IterableUserDict):
            def __init__(self, environ):
                UserDict.UserDict.__init__(self)
                self.data = environ
            def __setitem__(self, key, item):
                putenv(key, item)
                self.data[key] = item
            def update(self,  dict=None, **kwargs):
                if dict:
                    try:
                        keys = dict.keys()
                    except AttributeError:
                        # List of (key, value)
                        for k, v in dict:
                            self[k] = v
                    else:
                        # got keys
                        # cannot use items(), since mappings
                        # may not have them.
                        for k in keys:
                            self[k] = dict[k]
                if kwargs:
                    self.update(kwargs)
            try:
                unsetenv
            except NameError:
                pass
            else:
                def __delitem__(self, key):
                    unsetenv(key)
                    del self.data[key]
                def clear(self):
                    for key in self.data.keys():
                        unsetenv(key)
                        del self.data[key]
                def pop(self, key, *args):
                    unsetenv(key)
                    return self.data.pop(key, *args)
            def copy(self):
                return dict(self)


    environ = _Environ(environ)

def getenv(key, default=None):
    """Get an environment variable, return None if it doesn't exist.
    The optional second argument can specify an alternate default."""
    return environ.get(key, default)
__all__.append("getenv")

def _exists(name):
    return name in globals()

# Supply spawn*() (probably only for Unix)
if _exists("fork") and not _exists("spawnv") and _exists("execv"):

    P_WAIT = 0
    P_NOWAIT = P_NOWAITO = 1

    # XXX Should we support P_DETACH?  I suppose it could fork()**2
    # and close the std I/O streams.  Also, P_OVERLAY is the same
    # as execv*()?

    def _spawnvef(mode, file, args, env, func):
        # Internal helper; func is the exec*() function to use
        pid = fork()
        if not pid:
            # Child
            try:
                if env is None:
                    func(file, args)
                else:
                    func(file, args, env)
            except:
                _exit(127)
        else:
            # Parent
            if mode == P_NOWAIT:
                return pid # Caller is responsible for waiting!
            while 1:
                wpid, sts = waitpid(pid, 0)
                if WIFSTOPPED(sts):
                    continue
                elif WIFSIGNALED(sts):
                    return -WTERMSIG(sts)
                elif WIFEXITED(sts):
                    return WEXITSTATUS(sts)
                else:
                    raise error, "Not stopped, signaled or exited???"

    def spawnv(mode, file, args):
        """spawnv(mode, file, args) -> integer

Execute file with arguments from args in a subprocess.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return _spawnvef(mode, file, args, None, execv)

    def spawnve(mode, file, args, env):
        """spawnve(mode, file, args, env) -> integer

Execute file with arguments from args in a subprocess with the
specified environment.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return _spawnvef(mode, file, args, env, execve)

    # Note: spawnvp[e] is't currently supported on Windows

    def spawnvp(mode, file, args):
        """spawnvp(mode, file, args) -> integer

Execute file (which is looked for along $PATH) with arguments from
args in a subprocess.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return _spawnvef(mode, file, args, None, execvp)

    def spawnvpe(mode, file, args, env):
        """spawnvpe(mode, file, args, env) -> integer

Execute file (which is looked for along $PATH) with arguments from
args in a subprocess with the supplied environment.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return _spawnvef(mode, file, args, env, execvpe)

if _exists("spawnv"):
    # These aren't supplied by the basic Windows code
    # but can be easily implemented in Python

    def spawnl(mode, file, *args):
        """spawnl(mode, file, *args) -> integer

Execute file with arguments from args in a subprocess.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return spawnv(mode, file, args)

    def spawnle(mode, file, *args):
        """spawnle(mode, file, *args, env) -> integer

Execute file with arguments from args in a subprocess with the
supplied environment.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        env = args[-1]
        return spawnve(mode, file, args[:-1], env)


    __all__.extend(["spawnv", "spawnve", "spawnl", "spawnle",])


if _exists("spawnvp"):
    # At the moment, Windows doesn't implement spawnvp[e],
    # so it won't have spawnlp[e] either.
    def spawnlp(mode, file, *args):
        """spawnlp(mode, file, *args) -> integer

Execute file (which is looked for along $PATH) with arguments from
args in a subprocess with the supplied environment.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        return spawnvp(mode, file, args)

    def spawnlpe(mode, file, *args):
        """spawnlpe(mode, file, *args, env) -> integer

Execute file (which is looked for along $PATH) with arguments from
args in a subprocess with the supplied environment.
If mode == P_NOWAIT return the pid of the process.
If mode == P_WAIT return the process's exit code if it exits normally;
otherwise return -SIG, where SIG is the signal that killed it. """
        env = args[-1]
        return spawnvpe(mode, file, args[:-1], env)


    __all__.extend(["spawnvp", "spawnvpe", "spawnlp", "spawnlpe",])


# Supply popen2 etc. (for Unix)
if _exists("fork"):
    if not _exists("popen2"):
        def popen2(cmd, mode="t", bufsize=-1):
            """Execute the shell command 'cmd' in a sub-process.  On UNIX, 'cmd'
            may be a sequence, in which case arguments will be passed directly to
            the program without shell intervention (as with os.spawnv()).  If 'cmd'
            is a string it will be passed to the shell (as with os.system()). If
            'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
            file objects (child_stdin, child_stdout) are returned."""
            import warnings
            msg = "os.popen2 is deprecated.  Use the subprocess module."
            warnings.warn(msg, DeprecationWarning, stacklevel=2)

            import subprocess
            PIPE = subprocess.PIPE
            p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
                                 bufsize=bufsize, stdin=PIPE, stdout=PIPE,
                                 close_fds=True)
            return p.stdin, p.stdout
        __all__.append("popen2")

    if not _exists("popen3"):
        def popen3(cmd, mode="t", bufsize=-1):
            """Execute the shell command 'cmd' in a sub-process.  On UNIX, 'cmd'
            may be a sequence, in which case arguments will be passed directly to
            the program without shell intervention (as with os.spawnv()).  If 'cmd'
            is a string it will be passed to the shell (as with os.system()). If
            'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
            file objects (child_stdin, child_stdout, child_stderr) are returned."""
            import warnings
            msg = "os.popen3 is deprecated.  Use the subprocess module."
            warnings.warn(msg, DeprecationWarning, stacklevel=2)

            import subprocess
            PIPE = subprocess.PIPE
            p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
                                 bufsize=bufsize, stdin=PIPE, stdout=PIPE,
                                 stderr=PIPE, close_fds=True)
            return p.stdin, p.stdout, p.stderr
        __all__.append("popen3")

    if not _exists("popen4"):
        def popen4(cmd, mode="t", bufsize=-1):
            """Execute the shell command 'cmd' in a sub-process.  On UNIX, 'cmd'
            may be a sequence, in which case arguments will be passed directly to
            the program without shell intervention (as with os.spawnv()).  If 'cmd'
            is a string it will be passed to the shell (as with os.system()). If
            'bufsize' is specified, it sets the buffer size for the I/O pipes.  The
            file objects (child_stdin, child_stdout_stderr) are returned."""
            import warnings
            msg = "os.popen4 is deprecated.  Use the subprocess module."
            warnings.warn(msg, DeprecationWarning, stacklevel=2)

            import subprocess
            PIPE = subprocess.PIPE
            p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
                                 bufsize=bufsize, stdin=PIPE, stdout=PIPE,
                                 stderr=subprocess.STDOUT, close_fds=True)
            return p.stdin, p.stdout
        __all__.append("popen4")

import copy_reg as _copy_reg

def _make_stat_result(tup, dict):
    return stat_result(tup, dict)

def _pickle_stat_result(sr):
    (type, args) = sr.__reduce__()
    return (_make_stat_result, args)

try:
    _copy_reg.pickle(stat_result, _pickle_stat_result, _make_stat_result)
except NameError: # stat_result may not exist
    pass

def _make_statvfs_result(tup, dict):
    return statvfs_result(tup, dict)

def _pickle_statvfs_result(sr):
    (type, args) = sr.__reduce__()
    return (_make_statvfs_result, args)

try:
    _copy_reg.pickle(statvfs_result, _pickle_statvfs_result,
                     _make_statvfs_result)
except NameError: # statvfs_result may not exist
    pass

Переменная окружения (переменная среды́, англ. environment variable) в Windows используются для хранения текстовых строк пользователя и информации о настройках операционных систем.

In [9]:
#Чтобы получить доступ к значению переменной, необходимо поставить знак % перед её названием и после него, например:
!echo %PROCESSOR_ARCHITECTURE%
AMD64

In []:
#Чтобы установить значение переменной:
SET TEMP=C:\TEMP
Кроме того, с переменными среды можно работать, нажав кнопку «Переменные среды» на вкладке «Дополнительно» в диалоговом окне «Свойства системы» (контекстное меню значка «Мой компьютер» → пункт «Свойства»).
Также необходимо помнить, что, в отличие от UNIX-систем, в DOS и в стандартной командной строке Windows переменные среды не наследуются запускаемыми процессами, а используются совместно. Это позволяет, например, возвращать через них результаты работы программ, но, с другой стороны, создаёт возможность порчи или переполнения. Особенно актуально переполнение для переменной PATH, поскольку она часто дополняется при работе различных скриптов. При возникновении такого переполнения достаточно просто перезапустить интерпретатор командной строки. Интерпретаторы, портированные из UNIX-систем (например, Z-shell), такой проблеме не подвержены.
Получить значение переменной в программном коде можно с помощью метода ExpandEnvironmentStrings COM-объекта WScript.Shell:
In []:
WScriptShell = ObjCreate("WScript.Shell")
UserName = WScriptShell.ExpandEnvironmentStrings("%USERNAME%")
Следует учитывать, что набор значений переменных среды получается процессом во время его запуска, все запускаемые им подчиненные процессы получают значения переменных из этого набора, если второй процесс (независимый от первого) изменяет значение переменной среды или создает новую переменную, эти изменения не будут доступны первому процессу.
Значения переменных среды LOGONSERVER, CLIENTNAME, SESSIONNAME, APPDATA, HOMEDRIVE, HOMEPATH устанавливаются при открытии сеанса на основании значений в ветке реестра [HKEY_CURRENT_USEREnvironment].

Воспользуемся справкой консоли Windows

In []:
help
help systeminfo
help path
help set
In [1]:
!help
For more information on a specific command, type HELP command-name
ASSOC          Displays or modifies file extension associations.
ATTRIB         Displays or changes file attributes.
BREAK          Sets or clears extended CTRL+C checking.
BCDEDIT        Sets properties in boot database to control boot loading.
CACLS          Displays or modifies access control lists (ACLs) of files.
CALL           Calls one batch program from another.
CD             Displays the name of or changes the current directory.
CHCP           Displays or sets the active code page number.
CHDIR          Displays the name of or changes the current directory.
CHKDSK         Checks a disk and displays a status report.
CHKNTFS        Displays or modifies the checking of disk at boot time.
CLS            Clears the screen.
CMD            Starts a new instance of the Windows command interpreter.
COLOR          Sets the default console foreground and background colors.
COMP           Compares the contents of two files or sets of files.
COMPACT        Displays or alters the compression of files on NTFS partitions.
CONVERT        Converts FAT volumes to NTFS.  You cannot convert the
               current drive.
COPY           Copies one or more files to another location.
DATE           Displays or sets the date.
DEL            Deletes one or more files.
DIR            Displays a list of files and subdirectories in a directory.
DISKCOMP       Compares the contents of two floppy disks.
DISKCOPY       Copies the contents of one floppy disk to another.
DISKPART       Displays or configures Disk Partition properties.
DOSKEY         Edits command lines, recalls Windows commands, and 
               creates macros.
DRIVERQUERY    Displays current device driver status and properties.
ECHO           Displays messages, or turns command echoing on or off.
ENDLOCAL       Ends localization of environment changes in a batch file.
ERASE          Deletes one or more files.
EXIT           Quits the CMD.EXE program (command interpreter).
FC             Compares two files or sets of files, and displays the 
               differences between them.
FIND           Searches for a text string in a file or files.
FINDSTR        Searches for strings in files.
FOR            Runs a specified command for each file in a set of files.
FORMAT         Formats a disk for use with Windows.
FSUTIL         Displays or configures the file system properties.
FTYPE          Displays or modifies file types used in file extension 
               associations.
GOTO           Directs the Windows command interpreter to a labeled line in 
               a batch program.
GPRESULT       Displays Group Policy information for machine or user.
GRAFTABL       Enables Windows to display an extended character set in 
               graphics mode.
HELP           Provides Help information for Windows commands.
ICACLS         Display, modify, backup, or restore ACLs for files and 
               directories.
IF             Performs conditional processing in batch programs.
LABEL          Creates, changes, or deletes the volume label of a disk.
MD             Creates a directory.
MKDIR          Creates a directory.
MKLINK         Creates Symbolic Links and Hard Links
MODE           Configures a system device.
MORE           Displays output one screen at a time.
MOVE           Moves one or more files from one directory to another 
               directory.
OPENFILES      Displays files opened by remote users for a file share.
PATH           Displays or sets a search path for executable files.
PAUSE          Suspends processing of a batch file and displays a message.
POPD           Restores the previous value of the current directory saved by 
               PUSHD.
PRINT          Prints a text file.
PROMPT         Changes the Windows command prompt.
PUSHD          Saves the current directory then changes it.
RD             Removes a directory.
RECOVER        Recovers readable information from a bad or defective disk.
REM            Records comments (remarks) in batch files or CONFIG.SYS.
REN            Renames a file or files.
RENAME         Renames a file or files.
REPLACE        Replaces files.
RMDIR          Removes a directory.
ROBOCOPY       Advanced utility to copy files and directory trees
SET            Displays, sets, or removes Windows environment variables.
SETLOCAL       Begins localization of environment changes in a batch file.
SC             Displays or configures services (background processes).
SCHTASKS       Schedules commands and programs to run on a computer.
SHIFT          Shifts the position of replaceable parameters in batch files.
SHUTDOWN       Allows proper local or remote shutdown of machine.
SORT           Sorts input.
START          Starts a separate window to run a specified program or command.
SUBST          Associates a path with a drive letter.
SYSTEMINFO     Displays machine specific properties and configuration.
TASKLIST       Displays all currently running tasks including services.
TASKKILL       Kill or stop a running process or application.
TIME           Displays or sets the system time.
TITLE          Sets the window title for a CMD.EXE session.
TREE           Graphically displays the directory structure of a drive or 
               path.
TYPE           Displays the contents of a text file.
VER            Displays the Windows version.
VERIFY         Tells Windows whether to verify that your files are written
               correctly to a disk.
VOL            Displays a disk volume label and serial number.
XCOPY          Copies files and directory trees.
WMIC           Displays WMI information inside interactive command shell.

For more information on tools see the command-line reference in the online help.

In []:
C:\Users\kiss\Anaconda>help
Для получения сведений об определенной команде наберите HELP <имя команды>
ASSOC          Вывод либо изменение сопоставлений по расширениям имен файлов.
ATTRIB         Отображение и изменение атрибутов файлов.
BREAK        Включение и выключение режима обработки комбинации клавиш CTRL+C.
BCDEDIT        Задает свойства в базе данных загрузки для управления начальной
               загрузкой.
CACLS          Отображение и редактирование списков управления доступом (ACL)
               к файлам.
CALL           Вызов одного пакетного файла из другого.
CD             Вывод имени либо смена текущей папки.
CHCP           Вывод либо установка активной кодовой страницы.
CHDIR          Вывод имени либо смена текущей папки.
CHKDSK         Проверка диска и вывод статистики.
CHKNTFS        Отображение или изменение выполнения проверки диска во время
               загрузки.
CLS            Очистка экрана.
CMD            Запуск еще одного интерпретатора командных строк Windows.
COLOR       Установка цветов переднего плана и фона, используемых по умолчанию.
COMP           Сравнение содержимого двух файлов или двух наборов файлов.
COMPACT        Отображение и изменение сжатия файлов в разделах NTFS.
CONVERT        Преобразует тома FAT в NTFS. Вы не можете
               преобразовать текущий диск.
COPY           Копирование одного или нескольких файлов в другое место.
DATE           Вывод либо установка текущей даты.
DEL            Удаление одного или нескольких файлов.
DIR            Вывод списка файлов и подпапок из указанной папки.
DISKCOMP       Сравнение содержимого двух гибких дисков.
DISKCOPY       Копирование содержимого одного гибкого диска на другой.
DISKPART       Отображение и настройка свойств раздела диска.
DOSKEY         Редактирование и повторный вызов командных строк; создание
               макросов.
DRIVERQUERY    Отображение текущего состояния и свойств драйвера устройства.
ECHO           Вывод сообщений и переключение режима отображения команд на
               экране.
ENDLOCAL       Конец локальных изменений среды для пакетного файла.
ERASE          Удаление одного или нескольких файлов.
EXIT           Завершение работы программы CMD.EXE (интерпретатора командных
               строк).
FC             Сравнение двух файлов или двух наборов файлов и вывод различий
               между ними.
FIND           Поиск текстовой строки в одном или нескольких файлах.
FINDSTR        Поиск строк в файлах.
FOR            Запуск указанной команды для каждого из файлов в наборе.
FORMAT         Форматирование диска для работы с Windows.
FSUTIL         Отображение и настройка свойств файловой системы.
FTYPE          Вывод либо изменение типов файлов, используемых при
               сопоставлении по расширениям имен файлов.
GOTO           Передача управления в отмеченную строку пакетного файла.
GPRESULT       Отображение информации о групповой политике для компьютера или
               пользователя.
GRAFTABL       Позволяет Windows отображать расширенный набор символов в
               графическом режиме.
HELP           Выводит справочную информацию о командах Windows.
ICACLS         Отображение, изменение, архивация или восстановление
               списков ACL для файлов и каталогов.
IF             Оператор условного выполнения команд в пакетном файле.
LABEL          Создание, изменение и удаление меток тома для дисков.
MD             Создание папки.
MKDIR          Создание папки.
MKLINK         Cоздание символических и жестких ссылок
MODE           Конфигурирование системных устройств.
MORE           Последовательный вывод данных по частям размером в один экран.
MOVE           Перемещение одного или нескольких файлов из одной папки
               в другую.
OPENFILES      Отображение файлов, открытых на общей папке удаленным
               пользователем.
PATH           Отображает или устанавливает путь поиска исполняемых файлов.
PAUSE          Приостанавливает выполнение пакетного файла и выводит сообщение.
POPD           Восстанавливает предыдущее значение активной папки,
               сохраненное с помощью команды PUSHD.
PRINT          Выводит на печать содержимое текстового файла.
PROMPT         Изменяет приглашение в командной строке Windows.
PUSHD          Сохраняет значение активной папки и переходит к другой папке.
RD             Удаляет папку.
RECOVER        Восстанавливает данные, которые можно прочитать, с плохого или
               поврежденного диска.
REM            Помещает комментарии в пакетные файлы и файл CONFIG.SYS.
REN            Переименовывает файлы или папки.
RENAME         Переименовывает файлы или папки.
REPLACE        Замещает файлы.
RMDIR          Удаление папки.
ROBOCOPY       Улучшенное средство копирования файлов и деревьев каталогов
SET            Показывает, устанавливает и удаляет переменные среды Windows.
SETLOCAL       Начинает локализацию изменений среды в пакетном файле.
SC             Отображает и настраивает службы (фоновые процессы).
SCHTASKS       Выполняет команды и запускает программы по расписанию.
SHIFT          Изменение положения (сдвиг) подставляемых параметров для
пакетного файла.
SHUTDOWN       Локальное или удаленное выключение компьютера.
SORT           Сортировка ввода.
START          Выполнение программы или команды в отдельном окне.
SUBST          Назначение заданному пути имени диска.
SYSTEMINFO     Вывод сведений о системе и конфигурации компьютера.
TASKLIST       Отображение всех выполняемых задач, включая службы.
TASKKILL       Прекращение или остановка процесса или приложения.
TIME           Вывод и установка системного времени.
TITLE          Назначение заголовка окна для текущего сеанса интерпретатора
               командных строк CMD.EXE.
TREE           Графическое отображение структуры каталогов диска или папки.

TYPE           Вывод на экран содержимого текстовых файлов.
VER            Вывод сведений о версии Windows.
VERIFY         Установка режима проверки правильности записи файлов на диск.

VOL            Вывод метки и серийного номера тома для диска.
XCOPY          Копирование файлов и деревьев каталогов.
WMIC           Вывод сведений WMI в интерактивной среде.

Дополнительные сведения о средствах см. в справочнике по командной
строке в справочной системе.
In []:
C:\Users\kiss\Anaconda>help systeminfo

SYSTEMINFO [/S <система> [/U <пользователь> [/P [<пароль>]]]] [/FO формат] [/NH]

Описание:
    Отображает сведения о конфигурации операционной системы
    локальный или удаленный компьютер, включая уровни пакета обновления.

Список параметров:
  /S   <система>                 Подключаемый удаленный компьютер.

  /U  [<домен>\]<пользователь>  Пользовательский контекст, в котором
                                 должна выполняться эта команда.

  /P  [<пароль>]                 Пароль для этого пользовательского контекста.
                                 Запрашивает ввод пароля, если он не задан.

  /FO <формат>                   Определяет формат, в котором отображаются
                                 выходные данные.
                                 Допустимые форматы: "TABLE", "LIST", "CSV".

  /NH                            Не отображать заголовки столбцов в
                                 выходных данных.
                                 Допускается для форматов "TABLE" и "CSV".

  /?                             Вывод справки по использованию.

Примеры:
    SYSTEMINFO
    SYSTEMINFO /?
    SYSTEMINFO /S <система>
    SYSTEMINFO /S <система> /U user
    SYSTEMINFO /S <система> /U <домен>\<пользователь> /P <пароль> /FO TABLE
    SYSTEMINFO /S <система> /FO LIST
    SYSTEMINFO /S <система> /FO CSV /NH
In []:
C:\Users\kiss\Anaconda>help path
Вывод или задание пути поиска исполняемых файлов.

PATH [[диск:]путь[;...][;%PATH%]
PATH ;

Команда PATH ; очищает путь поиска используемых файлов, ограничив его
текущим каталогом.
Команда PATH без параметров отображает текущий путь поиска.
При включении в командную строку переменной %PATH% прежний путь поиска
добавляется в конец нового.
In []:
C:\Users\kiss\Anaconda>help set
Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

  переменная  Имя переменной среды.
  строка      Строка символов, присваиваемая указанной переменной.

Введите SET без параметров для вывода текущих переменных среды.

Изменение команды SET при включении расширенной обработки команд:

Если при вызове указать только имя переменной без знака равенства и значения,
команда SET выведет значения всех переменных, имя которых начинается
с указанной строки.  Например:

    SET P

Эта команда выведет значения всех переменных, имена которых начинаются с 'P'.
In []:
Если имя переменной не найдено в текущей среде, при возврате команда SET
установит значение ошибки ERRORLEVEL 1.

Команда SET не допускает использование знака равенства в имени
переменной среды.

Команда SET поддерживает два дополнительных ключа:

    SET /A выражение
    SET /P variable=[promptString]

Ключ /A указывает, что строка справа от знака равенства является числовым
выражением, значение которого вычисляется.  Обработчик выражений очень
прост и поддерживает следующие операции, перечисленные в порядке убывания
приоритета:

       ()                  - группировка
    ! ~ -               - унарные операторы
    * / %              - арифметические операторы
    + -                 - арифметические операторы
    << >>               - двоичный сдвиг
    &                   - двоичное И
    ^                   - двоичное исключающее ИЛИ
    |                   - двоичное ИЛИ
    = *= /= %= += -=    - присвоение
      &= ^= |= <<= >>=
    ,                   - разделитель операторов

При использовании любых логических или двоичных операторов необходимо
заключить строку выражения в кавычки.  Любые нечисловые строки в выражении
рассматриваются как имена переменных среды, значения которых преобразуются
в числовой вид перед использованием.  Если переменная с указанным именем
не определена в системе, вместо нее подставляется нулевое значение.  Это
позволяет выполнять арифметические операции со значениями переменных среды,
причем не нужно вводить знаки % для получения значений.  Если команда
SET /A вызывается из командной строки, а не из пакетного файла, она выводит
окончательное значение выражения.  Слева от любого оператора присваивания
должно стоять имя переменной среды.  Числовые значения рассматриваются как
десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел,
и 0 для восьмеричных чисел.  Например, числа 0x12,
и 022 обозначают десятичное число 18.  Обратите внимание на запись
восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в
восьмеричной системе исчисления цифры 8 и 9 не используются.

Ключ /P позволяет установить значение переменной для входной строки, введенной
пользователем.  Показывает указанное приглашение promptString перед чтением
введенной строки.  Приглашение promptString может быть пустым.

Подстановка переменной среды может быть расширена следующим образом:

    %PATH:str1=str2%

расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в
расширенном результате на "str2".  "str2" может быть пустой строкой для
эффективного удаления вхождений "str1" из расширенного вывода. "str1" может
начинаться со звездочки, и в этом случае это будет соответствовать любому
началу расширенного вывода до первого вхождения оставшейся части "str1".


Можно также использовать строки расширения.

    %PATH:~10,5%

расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата.  Если длина не указана, по умолчанию используется оставшееся
значение переменной.  Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.

    %PATH:~-10%

извлечет последние 10 символов переменной PATH.

    %PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.

Наконец, добавлена поддержка связывания времени выполнения для переменных среды
окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки
CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /?

Связывание времени выполнения для переменных среды окружения полезно при обходе
ограничений раннего связывания, которое происходит при первом чтении текстовой
строки, а не при ее выполнении. Следующий пример демонстрирует возникающую
проблему при использовании раннего связывания переменных:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения
    )

Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF
подставляется в момент первого использования в первом IF, в том числе и в тело
первого ветвления IF, которое является составным выражением. В IF внутри
составного выражения в действительности сравниваются значения "before" и
"after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

в данном случае список файлов текущей папки никогда не будет построен. Вместо
этого, значением переменной LIST будет имя последнего найденного файла.
И вновь, это случилось потому, что %LIST% подставляется всего один раз -
в момент обработки выражения FOR, когда список еще пуст.
Фактически, приведенный фрагмент эквивалентен следующему примеру:

    for %i in (*) do set LIST= %i
в котором имя последнего найденного файла сохраняется в переменной LIST.

Связывание времени выполнения для переменных среды окружения происходит при
использовании специального символа (восклицательного знака), обозначающего
проведение сопоставления во время выполнения. Если включена поддержка
связывания времени выполнения, то для достижения ожидаемых результатов
приведенные выше фрагменты должны быть изменены следующим образом:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

При включенной расширенной обработке команд доступны несколько переменных
среды, которые расширяются, но не отображаются в списке при вызове команды SET.
Значения этих переменных вычисляются динамически каждый раз при их извлечении.
Если пользователь явно задает переменные с одним из этих имен,
то это определение переопределяет соответствующее динамическое определение,
описанное ниже:

%CD% - заменяется строкой текущего каталога.

%DATE% - заменяется текущей датой с форматом команды DATE.

%TIME% - заменяется текущей датой с форматом команды TIME.

%RANDOM% - заменяется случайным десятичным числом в диапазоне от 0 до 32767.

%ERRORLEVEL% - заменяется текущим значением ERRORLEVEL

%CMDEXTVERSION% - заменяется текущим значением версии
                    расширенной обработки команд.

%CMDCMDLINE% - заменяется исходной командной строкой, которая вызвала
командный процессор.

%HIGHESTNUMANODENUMBER% - заменяется максимальным номером узла NUMA
    на этом компьютере.
In [2]:
!set
CLICOLOR=1
GIT_PAGER=cat
PAGER=cat
TERM=xterm-color
TMP=C:\Users\kiss\AppData\Local\Temp
COMPUTERNAME=WEB-UNIVERSUM
USERDOMAIN=WEB-UNIVERSUM
PYTHON=C:\Users\kiss\Anaconda\python.exe
PSMODULEPATH=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
COMMONPROGRAMFILES=C:\Program Files\Common Files
PROCESSOR_IDENTIFIER=AMD64 Family 20 Model 2 Stepping 0, AuthenticAMD
PROGRAMFILES=C:\Program Files
PROCESSOR_REVISION=0200
SYSTEMROOT=C:\WINDOWS
PATH=C:\Users\kiss\Anaconda\lib\site-packages\numpy\core;C:\Program Files\ImageMagick-6.8.8-Q8;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\Java\jdk1.7.0_21\bin;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\HashiCorp\Vagrant\bin;C:\Users\kiss\Anaconda\Scripts;C:\Program Files\cURL\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files\HDF_Group\HDF5\1.8.12\bin;C:\Users\kiss\Anaconda;C:\Users\kiss\AppData\Local\Pandoc\
AMDAPPSDKROOT=C:\Program Files (x86)\AMD APP\
PROGRAMFILES(X86)=C:\Program Files (x86)
COMSPEC=C:\WINDOWS\system32\cmd.exe
TK_LIBRARY=C:\Users\kiss\Anaconda\tcl\tk8.5
TEMP=C:\Users\kiss\AppData\Local\Temp
COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files
PROCESSOR_ARCHITECTURE=AMD64
TIX_LIBRARY=C:\Users\kiss\Anaconda\tcl\tix8.4.3
ALLUSERSPROFILE=C:\ProgramData
LOCALAPPDATA=C:\Users\kiss\AppData\Local
HOMEPATH=\Users\kiss
USERDOMAIN_ROAMINGPROFILE=WEB-UNIVERSUM
VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_21
PROGRAMW6432=C:\Program Files
USERNAME=kiss
LOGONSERVER=\\MicrosoftAccount
PROMPT=$P$G
SESSIONNAME=Console
PROGRAMDATA=C:\ProgramData
TCL_LIBRARY=C:\Users\kiss\Anaconda\tcl\tcl8.5
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
FP_NO_HOST_CHECK=NO
WINDIR=C:\WINDOWS
OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
APPDATA=C:\Users\kiss\AppData\Roaming
HOMEDRIVE=C:
SYSTEMDRIVE=C:
NUMBER_OF_PROCESSORS=2
VBOX_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
PROCESSOR_LEVEL=20
COMMONPROGRAMW6432=C:\Program Files\Common Files
OS=Windows_NT
PUBLIC=C:\Users\Public
USERPROFILE=C:\Users\kiss

In [3]:
!path
PATH=C:\Users\kiss\Anaconda\lib\site-packages\numpy\core;C:\Program Files\ImageMagick-6.8.8-Q8;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\Java\jdk1.7.0_21\bin;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\HashiCorp\Vagrant\bin;C:\Users\kiss\Anaconda\Scripts;C:\Program Files\cURL\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files\HDF_Group\HDF5\1.8.12\bin;C:\Users\kiss\Anaconda;C:\Users\kiss\AppData\Local\Pandoc\

In []:
PATH=
    C:\Users\kiss\Anaconda\lib\site-packages\numpy\core;
    C:\Program Files\ImageMagick-6.8.8-Q8;
    C:\Program Files (x86)\AMD APP\bin\x86_64;
    C:\Program Files (x86)\AMD APP\bin\x86;
    C:\WINDOWS\system32;
    C:\WINDOWS;
    C:\WINDOWS\System32\Wbem;
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
    C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;
    C:\Program Files (x86)\Windows Live\Shared;
    C:\Program Files\Java\jdk1.7.0_21\bin;
    C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
    C:\HashiCorp\Vagrant\bin;
    C:\Users\kiss\Anaconda\Scripts;
    C:\Program Files\cURL\bin;
    C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;
    C:\Program Files\HDF_Group\HDF5\1.8.12\bin;
    C:\Users\kiss\Anaconda;
    C:\Users\kiss\AppData\Local\Pandoc\

Переменные среды пользователя для kiss (верхнее окно в Settings - Control Panel - System - Advanced - Environment... )

Проще кликнуть правой кнопкой на нижней панели и далее выбрать в свойствах "advanced..."
In []:
PATH
C:\Users\kiss\Anaconda;C:\Users\kiss\Anaconda\Scripts;C:\Users\kiss\AppData\Local\Pandoc\
In []:
TEMP
%USERPROFILE%\AppData\Local\Temp
In []:
TMP
%USERPROFILE%\AppData\Local\Temp

Системные переменные (нижнее окно в Settings - Control Panel - System - Advanced - Environment... )

In []:
AMDAPPSDKROOT
C:\Program Files (x86)\AMD APP\
In []:
ComSpec
%SystemRoot%\system32\cmd.exe
In []:
FP_NO_HOST_CHECK
NO
In []:
JAVA_HOME
C:\Program Files\Java\jdk1.7.0_21
In []:
NUMBER_OF_PROCESSORS
2
In []:
OPENSSL_CONF
C:\OpenSSL-Win64\bin\openssl.cfg
In []:
OS
Windows_NT
In []:
Path
C:\Program Files\ImageMagick-6.8.8-Q8;
C:\Program Files (x86)\AMD APP\bin\x86_64;
C:\Program Files (x86)\AMD APP\bin\x86;
C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;
C:\Program Files (x86)\Windows Live\Shared;
C:\Program Files\Java\jdk1.7.0_21\bin;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\HashiCorp\Vagrant\bin;
C:\Users\kiss\Anaconda\Scripts;
C:\Program Files\cURL\bin;
C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;
C:\Program Files\HDF_Group\HDF5\1.8.12\bin
In []:
PATHEXT
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
In []:
PROCESSOR_ARCHITECTURE
AMD64
In []:
PROCESSOR_IDENTIFIER
AMD64 Family 20 Model 2 Stepping 0, AuthenticAMD
In []:
PROCESSOR_LEVEL
20
In []:
PROCESSOR_REVISION
0200
In []:
PSModulePath
%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\
In []:
PYTHON
C:\Users\kiss\Anaconda\python.exe
In []:
TEMP
%SystemRoot%\TEMP
In []:
TMP
%SystemRoot%\TEMP
In []:
USERNAME
SYSTEM
In []:
VBOX_INSTALL_PATH
C:\Program Files\Oracle\VirtualBox\
In []:
VS120COMNTOOLS
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
In []:
windir
%SystemRoot%
In [5]:
!%SystemRoot%
'C:\WINDOWS' is not recognized as an internal or external command,
operable program or batch file.

In [7]:
!%HOMEPATH%
'\Users\kiss' is not recognized as an internal or external command,
operable program or batch file.

In [8]:
!%PAGER%
'cat' is not recognized as an internal or external command,
operable program or batch file.

In []:
 


Посты чуть ниже также могут вас заинтересовать

4 комментария:

  1. При чтении мануала http://sphinx-doc.org/extensions.html
    обнаружил очень полезный пример, в котором как раз предлагался способ "Set Python’s module search path...":

    Where to put your own extensions? ()
    Extensions local to a project should be put within the project’s directory structure. Set Python’s module search path, sys.path, accordingly so that Sphinx can find them. E.g., if your extension foo.py lies in the exts subdirectory of the project root, put into conf.py:

    import sys, os
    sys.path.append(os.path.abspath('exts'))
    extensions = ['foo']

    You can also install extensions anywhere else on sys.path, e.g. in the site-packages directory.

    ОтветитьУдалить
  2. C:\Users\kiss\Documents\sphinx\aksiomatic>set /?
    Вывод, задание и удаление переменных среды cmd.exe.

    SET [переменная=[строка]]

    переменная Имя переменной среды.
    строка Строка символов, присваиваемая указанной переменной.

    Введите SET без параметров для вывода текущих переменных среды.

    Изменение команды SET при включении расширенной обработки команд:

    Если при вызове указать только имя переменной без знака равенства и значения,
    команда SET выведет значения всех переменных, имя которых начинается
    с указанной строки. Например:

    SET P

    Эта команда выведет значения всех переменных, имена которых начинаются с 'P'.

    Если имя переменной не найдено в текущей среде, при возврате команда SET
    установит значение ошибки ERRORLEVEL 1.

    Команда SET не допускает использование знака равенства в имени
    переменной среды.

    Команда SET поддерживает два дополнительных ключа:

    SET /A выражение
    SET /P variable=[promptString]

    Ключ /A указывает, что строка справа от знака равенства является числовым
    выражением, значение которого вычисляется. Обработчик выражений очень
    прост и поддерживает следующие операции, перечисленные в порядке убывания
    приоритета:

    () - группировка
    ! ~ - - унарные операторы
    * / % - арифметические операторы
    + - - арифметические операторы
    << >> - двоичный сдвиг
    & - двоичное И
    ^ - двоичное исключающее ИЛИ
    | - двоичное ИЛИ
    = *= /= %= += -= - присвоение
    &= ^= |= <<= >>=
    , - разделитель операторов

    При использовании любых логических или двоичных операторов необходимо
    заключить строку выражения в кавычки. Любые нечисловые строки в выражении
    рассматриваются как имена переменных среды, значения которых преобразуются
    в числовой вид перед использованием. Если переменная с указанным именем
    не определена в системе, вместо нее подставляется нулевое значение. Это
    позволяет выполнять арифметические операции со значениями переменных среды,
    причем не нужно вводить знаки % для получения значений. Если команда
    SET /A вызывается из командной строки, а не из пакетного файла, она выводит
    окончательное значение выражения. Слева от любого оператора присваивания
    должно стоять имя переменной среды. Числовые значения рассматриваются как
    десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел,
    и 0 для восьмеричных чисел. Например, числа 0x12,
    и 022 обозначают десятичное число 18. Обратите внимание на запись
    восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в
    восьмеричной системе исчисления цифры 8 и 9 не используются.

    Ключ /P позволяет установить значение переменной для входной строки, введенной
    пользователем. Показывает указанное приглашение promptString перед чтением
    введенной строки. Приглашение promptString может быть пустым.

    ОтветитьУдалить
  3. Подстановка переменной среды может быть расширена следующим образом:

    %PATH:str1=str2%

    расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в
    расширенном результате на "str2". "str2" может быть пустой строкой для
    эффективного удаления вхождений "str1" из расширенного вывода. "str1" может
    начинаться со звездочки, и в этом случае это будет соответствовать любому
    началу расширенного вывода до первого вхождения оставшейся части "str1".


    Можно также использовать строки расширения.

    %PATH:~10,5%

    расширит действие переменной среды PATH, затем использует только 5
    символов, которые начинаются с 11-го символа (пропустив 10) расширенного
    результата. Если длина не указана, по умолчанию используется оставшееся
    значение переменной. Если оба значения (длина и число пропускаемых символов)
    отрицательны, следующим используемым значением будет длина значения переменной
    среды, добавленной к указанному значению пропуска или указанной длины.

    %PATH:~-10%

    извлечет последние 10 символов переменной PATH.

    %PATH:~0,-2%

    извлечет все символы переменной PATH, за исключением 2-х последних.

    Наконец, добавлена поддержка связывания времени выполнения для переменных среды
    окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки
    CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /?

    Связывание времени выполнения для переменных среды окружения полезно при обходе
    ограничений раннего связывания, которое происходит при первом чтении текстовой
    строки, а не при ее выполнении. Следующий пример демонстрирует возникающую
    проблему при использовании раннего связывания переменных:

    set VAR=before
    if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения
    )

    Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF
    подставляется в момент первого использования в первом IF, в том числе и в тело
    первого ветвления IF, которое является составным выражением. В IF внутри
    составного выражения в действительности сравниваются значения "before" и
    "after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

    в данном случае список файлов текущей папки никогда не будет построен. Вместо
    этого, значением переменной LIST будет имя последнего найденного файла.
    И вновь, это случилось потому, что %LIST% подставляется всего один раз -
    в момент обработки выражения FOR, когда список еще пуст.
    Фактически, приведенный фрагмент эквивалентен следующему примеру:

    for %i in (*) do set LIST= %i

    в котором имя последнего найденного файла сохраняется в переменной LIST.

    Связывание времени выполнения для переменных среды окружения происходит при
    использовании специального символа (восклицательного знака), обозначающего
    проведение сопоставления во время выполнения. Если включена поддержка
    связывания времени выполнения, то для достижения ожидаемых результатов
    приведенные выше фрагменты должны быть изменены следующим образом:

    set VAR=before
    if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo Тело внутреннего оператора сравнения
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

    ОтветитьУдалить
  4. При включенной расширенной обработке команд доступны несколько переменных
    среды, которые расширяются, но не отображаются в списке при вызове команды SET.
    Значения этих переменных вычисляются динамически каждый раз при их извлечении.
    Если пользователь явно задает переменные с одним из этих имен,
    то это определение переопределяет соответствующее динамическое определение,
    описанное ниже:

    %CD% - заменяется строкой текущего каталога.

    %DATE% - заменяется текущей датой с форматом команды DATE.

    %TIME% - заменяется текущей датой с форматом команды TIME.

    %RANDOM% - заменяется случайным десятичным числом в диапазоне от 0 до 32767.

    %ERRORLEVEL% - заменяется текущим значением ERRORLEVEL

    %CMDEXTVERSION% - заменяется текущим значением версии
    расширенной обработки команд.

    %CMDCMDLINE% - заменяется исходной командной строкой, которая вызвала
    командный процессор.

    %HIGHESTNUMANODENUMBER% - заменяется максимальным номером узла NUMA
    на этом компьютере.

    ОтветитьУдалить