[译]The Python Tutorial#12. Virtual Environments and Packages
来源:互联网 发布:windows tv box 编辑:程序博客网 时间:2024/06/03 08:40
[译]The Python Tutorial#Virtual Environments and Packages
12.1 Introduction
Python应用经常使用不属于标准库的包和模块。应用有时会需要一个特定版本的库,因为应用可能会需要一个特定bug得到修复的库,或者应用依赖库中一个废弃版本的接口。
这意味着一个Python安装可能无法满足每个应用的需求。如果应用A依赖特定模块的1.0版本,而应用B依赖其2.0版本,那么需求就冲突了,并且安装1.0和2.0的任意一个版本都会导致其中一个应用无法运行。
以上问题的解决方案是创建虚拟环境,虚拟环境是包含一个特定Python版本的Python安装以及一些附加包的独立目录树。
不同的应用可以使用不同的虚拟环境。为解决先前需求冲突的例子,应用A可以拥有安装了版本1.0的虚拟环境,而应用B可以拥有安装了版本2.0的另一个虚拟环境。如果应用B需要升级到版本3.0的库,这不会影响A的虚拟环境。
12.2 Creating Virtual Environments
用来创建和管理虚拟换环境模块叫做venv
。venv
通常会安装最近版本的Python。如果系统中有多个版本的Python,可以运行python3
或者其他任何版本来选择一个指定的Python版本。
要创建一个虚拟环境,首先需要决定放置虚拟环境的目录,然后以脚本方式运行带有目录路径的venv
模块:
python3 -m venv tutorial-env
如果tutorial-env
目录不存在,会创建一个tutorial-env
目录,同时在目录中创建子目录,包含Python解释器,标准库以及各种各样支持文件的副本。
一旦创建了一个虚拟环境,就可以激活它了。
在Windows中,运行:
tutorial-env\Scripts\activate.bat
在Unix或者MacOS中,运行:
source tutorial-env/bin/activate
(这个脚本使用bash shell编写。如果你使用csh或者fish shell,有activae.csh
以及activate.fish
脚本可供选择)
激活虚拟环境会改变shell的提示,以显示正在使用的虚拟环境,并且改变环境,以便运行python
会得到特定版本和Python安装。例如:
$ source ~/envs/tutorial-env/bin/activate(tutorial-env) $ pythonPython 3.5.1 (default, May 6 2016, 10:59:36) ...>>> import sys>>> sys.path['', '/usr/local/lib/python35.zip', ...,'~/envs/tutorial-env/lib/python3.5/site-packages']>>>
12.3 Managing Packages with pip
使用一个叫做pip的程序,可以安装,更新和移除包。默认情况下pip
会从Python Package Index https://pypi.python.org/pypi 安装包。可以使用浏览器浏览Python Package Index,或者使用pip
有限的搜索特性:
(tutorial-env) $ pip search astronomyskyfield - Elegant astronomy for Pythongary - Galactic astronomy and gravitational dynamics.novas - The United States Naval Observatory NOVAS astronomy libraryastroobs - Provides astronomy ephemeris to plan telescope observationsPyAstronomy - A collection of astronomy related tools for Python....
pip
有一系列子命令:”search”, “install”, “uninstall”, “freeze”等等(参考 Installing Python Modules获取pip
的完整文档)
指定包的名字,可以安装最新版本的包:
(tutorial-env) $ pip install novasCollecting novas Downloading novas-3.1.1.3.tar.gz (136kB)Installing collected packages: novas Running setup.py install for novasSuccessfully installed novas-3.1.1.3
也可以给出包名字并且跟==
以及版本号来安装指定版本的包:
(tutorial-env) $ pip install requests==2.6.0Collecting requests==2.6.0 Using cached requests-2.6.0-py2.py3-none-any.whlInstalling collected packages: requestsSuccessfully installed requests-2.6.0
如果重新运行这个命令,pip
会注意到请求的版本已经安装并且不会做任何事情。可以提供不同版本号或者指定版本包,或者运行pip install --upgrade
升级包到最新版本:
(tutorial-env) $ pip install --upgrade requestsCollecting requestsInstalling collected packages: requests Found existing installation: requests 2.6.0 Uninstalling requests-2.6.0: Successfully uninstalled requests-2.6.0Successfully installed requests-2.7.0
命令pip uninstall
紧跟一个或多个包名或从虚拟环境中移除包。
pip show
展示指定包的信息:
(tutorial-env) $ pip show requests---Metadata-Version: 2.0Name: requestsVersion: 2.7.0Summary: Python HTTP for Humans.Home-page: http://python-requests.orgAuthor: Kenneth ReitzAuthor-email: me@kennethreitz.comLicense: Apache 2.0Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packagesRequires:
pip list
展示虚拟环境中所有已安装的包:
(tutorial-env) $ pip listnovas (3.1.1.3)numpy (1.9.2)pip (7.0.3)requests (2.7.0)setuptools (16.0)
pip freeze
产生类似的已安装包的列表,但是其输出使用了pip install
期望的格式。通常的约定是将输出放到requirements.txt
文件中:
(tutorial-env) $ pip freeze > requirements.txt(tutorial-env) $ cat requirements.txtnovas==3.1.1.3numpy==1.9.2requests==2.7.0
接下来可以将requirements.txt
提交到版本控制中,并且作为应用的一部分组装。用户就可以使用install -r
命令安装所有需要的包:
(tutorial-env) $ pip install -r requirements.txtCollecting novas==3.1.1.3 (from -r requirements.txt (line 1)) ...Collecting numpy==1.9.2 (from -r requirements.txt (line 2)) ...Collecting requests==2.7.0 (from -r requirements.txt (line 3)) ...Installing collected packages: novas, numpy, requests Running setup.py install for novasSuccessfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
还有其他许多选项。查阅 Installing Python Modules 获取完整的pip
文档。如果开发了一个包,并且希望在 Python Package Index上可用,查阅 Distributing Python Modules。
- [译]The Python Tutorial#12. Virtual Environments and Packages
- Python Virtual Environments 原理
- 4: Virtual Environments(Command line Python scripting )
- [译]The Python Tutorial#8. Errors and Exceptions
- [译]The Python Tutorial#7. Input and Output
- The Python Tutorial - Input and Output
- [python3教程]第十二章.虚拟环境和程序集(VIRVUAL ENVIRONMENTS AND PACKAGES)
- The Python Tutorial 7——Input and Output
- The Python Tutorial 8——Errors and Exceptions
- [译]The Python Tutorial#9. Classes
- [译]The Python Tutorial#6. Modules
- [译]The Python Tutorial#5. Data Structures
- The Python Tutorial - Modules
- [译]The Python Tutorial#2. Using the Python Interpreter
- Python document-The python tutorial
- The Makefile and Compilation Tutorial
- [译]The Python Tutorial#3. An Informal Introduction to Python
- 重读 The Python Tutorial 笔记
- CodeIgniter框架源码学习之钩子类--Hooks.php
- 应用经验 技巧 C#中的Dictionary作为人机语言转换的桥梁
- eclipse工程视图
- 页面的返回操作
- 关于逻辑运算符&、|和&&、||的区别
- [译]The Python Tutorial#12. Virtual Environments and Packages
- 《Kali+Linux渗透测试的艺术》学习总结之----Kali Linux简介
- BeanUtils.copyProperties 在copy Integer类型问题
- MySql 入门(1)
- 关于Python迭代器的问题
- echarts.js 画报表、数据可视化(第一部分)
- N线城市码农生存指南
- Java Enum 枚举类的使用一例
- Q-Learning算法学习