开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

source-code-analysis/python3.8.1

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
python3.8.1
/
Doc
/
library
/
venv.rst
python3.8.1
/
Doc
/
library
/
venv.rst
venv.rst 20.72 KB
一键复制 编辑 原始数据 按行查看 历史
zhangweibo 提交于 2021年11月16日 09:46 +08:00 . git init

:mod:`venv` --- Creation of virtual environments

.. module:: venv
 :synopsis: Creation of virtual environments.

.. moduleauthor:: Vinay Sajip <vinay_sajip@yahoo.co.uk>
.. sectionauthor:: Vinay Sajip <vinay_sajip@yahoo.co.uk>

.. versionadded:: 3.3

Source code: :source:`Lib/venv/`

.. index:: pair: Environments; virtual


The :mod:`venv` module provides support for creating lightweight "virtual environments" with their own site directories, optionally isolated from system site directories. Each virtual environment has its own Python binary (which matches the version of the binary that was used to create this environment) and can have its own independent set of installed Python packages in its site directories.

See .. seealso:: `Python Packaging User Guide: Creating and using virtual environments <https://packaging.python.org/installing/#creating-virtual-environments>`__

Creating virtual environments

Note

A virtual environment is a Python environment such that the Python interpreter, libraries and scripts installed into it are isolated from those installed in other virtual environments, and (by default) any libraries installed in a "system" Python, i.e., one which is installed as part of your operating system.

A virtual environment is a directory tree which contains Python executable files and other files which indicate that it is a virtual environment.

Common installation tools such as pip work as expected with virtual environments. In other words, when a virtual environment is active, they install Python packages into the virtual environment without needing to be told to do so explicitly.

When a virtual environment is active (i.e., the virtual environment's Python interpreter is running), the attributes :attr:`sys.prefix` and :attr:`sys.exec_prefix` point to the base directory of the virtual environment, whereas :attr:`sys.base_prefix` and :attr:`sys.base_exec_prefix` point to the non-virtual environment Python installation which was used to create the virtual environment. If a virtual environment is not active, then :attr:`sys.prefix` is the same as :attr:`sys.base_prefix` and :attr:`sys.exec_prefix` is the same as :attr:`sys.base_exec_prefix` (they all point to a non-virtual environment Python installation).

When a virtual environment is active, any options that change the installation path will be ignored from all :mod:`distutils` configuration files to prevent projects being inadvertently installed outside of the virtual environment.

When working in a command shell, users can make a virtual environment active by running an activate script in the virtual environment's executables directory (the precise filename and command to use the file is shell-dependent), which prepends the virtual environment's directory for executables to the PATH environment variable for the running shell. There should be no need in other circumstances to activate a virtual environment; scripts installed into virtual environments have a "shebang" line which points to the virtual environment's Python interpreter. This means that the script will run with that interpreter regardless of the value of PATH. On Windows, "shebang" line processing is supported if you have the Python Launcher for Windows installed (this was added to Python in 3.3 - see API

The high-level method described above makes use of a simple API which provides mechanisms for third-party virtual environment creators to customize environment creation according to their needs, the :class:`EnvBuilder` class.

There is also a module-level convenience function:

.. function:: create(env_dir, system_site_packages=False, clear=False, \
 symlinks=False, with_pip=False, prompt=None)

 Create an :class:`EnvBuilder` with the given keyword arguments, and call its
 :meth:`~EnvBuilder.create` method with the *env_dir* argument.

 .. versionadded:: 3.3

 .. versionchanged:: 3.4
 Added the ``with_pip`` parameter

 .. versionchanged:: 3.6
 Added the ``prompt`` parameter

An example of extending EnvBuilder

The following script shows how to extend :class:`EnvBuilder` by implementing a subclass which installs setuptools and pip into a created virtual environment:

import os
import os.path
from subprocess import Popen, PIPE
import sys
from threading import Thread
from urllib.parse import urlparse
from urllib.request import urlretrieve
import venv

class ExtendedEnvBuilder(venv.EnvBuilder):
 """
 This builder installs setuptools and pip so that you can pip or
 easy_install other packages into the created virtual environment.

 :param nodist: If true, setuptools and pip are not installed into the
 created virtual environment.
 :param nopip: If true, pip is not installed into the created
 virtual environment.
 :param progress: If setuptools or pip are installed, the progress of the
 installation can be monitored by passing a progress
 callable. If specified, it is called with two
 arguments: a string indicating some progress, and a
 context indicating where the string is coming from.
 The context argument can have one of three values:
 'main', indicating that it is called from virtualize()
 itself, and 'stdout' and 'stderr', which are obtained
 by reading lines from the output streams of a subprocess
 which is used to install the app.

 If a callable is not specified, default progress
 information is output to sys.stderr.
 """

 def __init__(self, *args, **kwargs):
 self.nodist = kwargs.pop('nodist', False)
 self.nopip = kwargs.pop('nopip', False)
 self.progress = kwargs.pop('progress', None)
 self.verbose = kwargs.pop('verbose', False)
 super().__init__(*args, **kwargs)

 def post_setup(self, context):
 """
 Set up any packages which need to be pre-installed into the
 virtual environment being created.

 :param context: The information for the virtual environment
 creation request being processed.
 """
 os.environ['VIRTUAL_ENV'] = context.env_dir
 if not self.nodist:
 self.install_setuptools(context)
 # Can't install pip without setuptools
 if not self.nopip and not self.nodist:
 self.install_pip(context)

 def reader(self, stream, context):
 """
 Read lines from a subprocess' output stream and either pass to a progress
 callable (if specified) or write progress information to sys.stderr.
 """
 progress = self.progress
 while True:
 s = stream.readline()
 if not s:
 break
 if progress is not None:
 progress(s, context)
 else:
 if not self.verbose:
 sys.stderr.write('.')
 else:
 sys.stderr.write(s.decode('utf-8'))
 sys.stderr.flush()
 stream.close()

 def install_script(self, context, name, url):
 _, _, path, _, _, _ = urlparse(url)
 fn = os.path.split(path)[-1]
 binpath = context.bin_path
 distpath = os.path.join(binpath, fn)
 # Download script into the virtual environment's binaries folder
 urlretrieve(url, distpath)
 progress = self.progress
 if self.verbose:
 term = '\n'
 else:
 term = ''
 if progress is not None:
 progress('Installing %s ...%s' % (name, term), 'main')
 else:
 sys.stderr.write('Installing %s ...%s' % (name, term))
 sys.stderr.flush()
 # Install in the virtual environment
 args = [context.env_exe, fn]
 p = Popen(args, stdout=PIPE, stderr=PIPE, cwd=binpath)
 t1 = Thread(target=self.reader, args=(p.stdout, 'stdout'))
 t1.start()
 t2 = Thread(target=self.reader, args=(p.stderr, 'stderr'))
 t2.start()
 p.wait()
 t1.join()
 t2.join()
 if progress is not None:
 progress('done.', 'main')
 else:
 sys.stderr.write('done.\n')
 # Clean up - no longer needed
 os.unlink(distpath)

 def install_setuptools(self, context):
 """
 Install setuptools in the virtual environment.

 :param context: The information for the virtual environment
 creation request being processed.
 """
 url = 'https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py'
 self.install_script(context, 'setuptools', url)
 # clear up the setuptools archive which gets downloaded
 pred = lambda o: o.startswith('setuptools-') and o.endswith('.tar.gz')
 files = filter(pred, os.listdir(context.bin_path))
 for f in files:
 f = os.path.join(context.bin_path, f)
 os.unlink(f)

 def install_pip(self, context):
 """
 Install pip in the virtual environment.

 :param context: The information for the virtual environment
 creation request being processed.
 """
 url = 'https://raw.github.com/pypa/pip/master/contrib/get-pip.py'
 self.install_script(context, 'pip', url)

def main(args=None):
 compatible = True
 if sys.version_info < (3, 3):
 compatible = False
 elif not hasattr(sys, 'base_prefix'):
 compatible = False
 if not compatible:
 raise ValueError('This script is only for use with '
 'Python 3.3 or later')
 else:
 import argparse

 parser = argparse.ArgumentParser(prog=__name__,
 description='Creates virtual Python '
 'environments in one or '
 'more target '
 'directories.')
 parser.add_argument('dirs', metavar='ENV_DIR', nargs='+',
 help='A directory in which to create the
 'virtual environment.')
 parser.add_argument('--no-setuptools', default=False,
 action='store_true', dest='nodist',
 help="Don't install setuptools or pip in the "
 "virtual environment.")
 parser.add_argument('--no-pip', default=False,
 action='store_true', dest='nopip',
 help="Don't install pip in the virtual "
 "environment.")
 parser.add_argument('--system-site-packages', default=False,
 action='store_true', dest='system_site',
 help='Give the virtual environment access to the '
 'system site-packages dir.')
 if os.name == 'nt':
 use_symlinks = False
 else:
 use_symlinks = True
 parser.add_argument('--symlinks', default=use_symlinks,
 action='store_true', dest='symlinks',
 help='Try to use symlinks rather than copies, '
 'when symlinks are not the default for '
 'the platform.')
 parser.add_argument('--clear', default=False, action='store_true',
 dest='clear', help='Delete the contents of the '
 'virtual environment '
 'directory if it already '
 'exists, before virtual '
 'environment creation.')
 parser.add_argument('--upgrade', default=False, action='store_true',
 dest='upgrade', help='Upgrade the virtual '
 'environment directory to '
 'use this version of '
 'Python, assuming Python '
 'has been upgraded '
 'in-place.')
 parser.add_argument('--verbose', default=False, action='store_true',
 dest='verbose', help='Display the output '
 'from the scripts which '
 'install setuptools and pip.')
 options = parser.parse_args(args)
 if options.upgrade and options.clear:
 raise ValueError('you cannot supply --upgrade and --clear together.')
 builder = ExtendedEnvBuilder(system_site_packages=options.system_site,
 clear=options.clear,
 symlinks=options.symlinks,
 upgrade=options.upgrade,
 nodist=options.nodist,
 nopip=options.nopip,
 verbose=options.verbose)
 for d in options.dirs:
 builder.create(d)

if __name__ == '__main__':
 rc = 1
 try:
 main()
 rc = 0
 except Exception as e:
 print('Error: %s' % e, file=sys.stderr)
 sys.exit(rc)

This script is also available for download /python_sourcecode/python3.8.1/blob/master/Doc/library/venv.rst

未知许可证
查看未知开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/python_sourcecode/python3.8.1.git
git@gitee.com:python_sourcecode/python3.8.1.git
python_sourcecode
python3.8.1
python3.8.1
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /