Python系列(1)- Python 简介、环境配置、开发/管理工具、Python 虚拟环境
Python 是荷兰人 Guido van Rossum(吉多·范罗苏姆,中国程序员称其为 “龟叔”)在 1990 年初开发的一种解释型编程语言。Python 源代码遵循 GPL(GNU General Public License)协议,现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。
Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Python 作为该编程语言的名字,是因为 Guido 是 Monty Python 戏剧团的忠实粉丝。
Python 语言是在 ABC 语言的基础上发展而来,其设计的初衷是成为 ABC 语言的替代品。ABC 语言虽然是一款功能强大的高级语言,遗憾的是,由于 ABC 语言不开放的原因,导致它没有得到普及应用。基于这个考虑,Guido 在开发 Python 之初就决定将其开源。
Python 中不仅添加了许多 ABC 语言没有的功能,同时,还为其设计了各种丰富而强大的库,利用这些 Python 库,程序员可以把使用其它语言制作的各类模块(尤其是 C 语言和 C++)很轻松地“黏连”在一起,因此 Python 又常被称为 “胶水” 语言。
注:这里所说的库和模块,简单地理解就是一个个的源文件,每个文件中都包含可实现各种功能的方法(也可称为函数)。
1. Python 简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于 PHP 和 Perl 语言。
Python 是交互式语言:这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着 Python 支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python 发展历史:
(1) Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。
(2) Python 2.0 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 Unicode。
(3) Python 3.0 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 Python 源代码。不过,很多新特性后来也被移植到旧的 Python 2.6/2.7 版本。
(4) Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。
Python 特点:
(1) 易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
(2) 易于阅读:Python 代码定义的更清晰。
(3) 易于维护:Python 的成功在于它的源代码是相当容易维护的。
(4) 一个广泛的标准库:Python 的最大的优势之一是丰富的库,跨平台的,在 UNIX,Windows 和Macintosh 兼容很好。
(5) 互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
(6) 可移植:基于其开放源代码的特性,Python 已经被移植(也就是使其工作)到许多平台。
(7) 可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用 C/C++ 完成那部分程序,然后从你的 Python 程序中调用。
(8) 数据库:Python 提供所有主要的商业数据库的接口。
(9) GUI 编程:Python 支持 GUI 可以创建和移植到许多系统调用。
(10) 可嵌入: 可以将 Python 嵌入到 C/C++ 程序,让你的程序的用户获得 "脚本化" 的能力。
2. Python 环境配置
Python 可应用于多种平台包括 Windows、Linux 和 Mac OS X 等,这里重点关注 Windows 和 Linux 环境下的配置。
Python 官网:https://www.python.org/
Python 文档地址:https://www.python.org/doc/
1) Windows 下安装 Python
在 Windows 上安装 Python 和安装普通软件一样简单,下载地址: https://www.python.org/downloads/windows/ 。
Python 有两个版本的 Python,分别是 Python 3.x 和 Python 2.x,建议初学者直接使用 Python 3.x,本文以 3.8.1 的文件下载列表为例:
Python 3.8.1 - Dec. 18, 2019
Note that Python 3.8.1 cannot be used on Windows XP or earlier.
Download Windows help file
Download Windows x86-64 embeddable zip file
Download Windows x86-64 executable installer
Download Windows x86-64 web-based installer
Download Windows x86 embeddable zip file
Download Windows x86 executable installer
Download Windows x86 web-based installer
前缀说明:
以 Windows x86-64 开头的是 64 位的 Python 安装程序;
以 Windows x86 开头的是 32 位的 Python 安装程序;
后缀说明:
embeddable zip file 表示 .zip 格式的绿色免安装版本,可以直接嵌入(集成)到其它的应用程序中;
executable installer 表示 .exe 格式的可执行程序,这是完整的离线安装包,一般选择这个即可;
web-based installer 表示通过网络安装的,也就是说下载到的是一个安装工具,安装过程中还需要联网下载真正的 Python 安装包。
本文选择的是 “Windows x86-64 executable installer”,也即 64 位的完整的离线安装包。
请尽量勾选 Add Python 3.8 to PATH,这样可以将 Python 命令工具所在目录添加到系统 Path 环境变量中,便于命令行运行 Python 命令。
Python 支持两种安装方式,默认安装和自定义安装:
默认安装会勾选所有组件,并安装在 C 盘;
自定义安装可以手动选择要安装的组件,并安装到其它盘符。
初学者建议选择默认安装。
2) Linux 下安装 Python
绝大多数的 Linux 发行版(Ubuntu、CentOS 等)都默认自带了 Python。有的 Linux 发行版甚至还会自带两个版本的 Python(Python 2.x 和 Python 3.x)。
打开 Linux 终端(Terminal),输入 python 命令就可以检测是否安装了 Python,以及安装了哪个版本,如下所示:
$ python -V
Python 2.7.5
注:当前的 Linux 发行版已经自带了 Python 2.7.5。
大部分的 Linux 发行版会自带 Python 2.x,检测当前 Linux 发行版是否安装了 Python 3.x,可以在终端(Terminal)输入 python3 命令,如下所示:
$ python3 -V
-bash: python3: command not found
注:当前的 Linux 发行版没有带 Python 3.x。如果需要使用 Python 3 (或现有 Python 3 版本不够新),那么就需要更新 Python 版本,这里以 Ubuntu 为例。
(1) 更新 Python 版本
在 Ubuntu 终端执行以下两条命令即可更新 Python 版本:
$ sudo apt-get update
$ sudo apt-get install python3.8
命令说明:
第一条命令用来指定更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 所列出的源地址,这样能够保证获得最新的安装包。
第二条命令用来指定安装 Python 3.8,这是目前最新的 Python 版本。
等待以上两条命令执行完成,再次在终端输入 python3 -V 命令,查看 Python 3.x 版本。
(2) 下载 Python 源码安装
在 apt-get 安装方式不作用时,可以尝试下载源代码,自己编译安装,当然,对 Linux 系统不熟悉的初学者要谨慎操作。
从 Python 官方(https://www.python.org/downloads/)下载页面,选择指定版本的 “Gzipped source tarball” 源码压缩包 (.tgz 格式) 的地址。
运行如下命令:
$ wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
$ tar -zxvf Python-3.8.1.tgz
进入 tar 解开的目录,使用 make 工具进行编译:
$ ./configure --prefix=/usr/local
$ make && sudo make install
这里的 --prefix=/usr/local 用于指定安装目录(建议指定)。如果不指定,就会使用默认的安装目录。
在终端输入 python3 -V 命令,查看 Python 3.x 版本。
3) Docker 部署 Python
参考 “Docker基础知识 (6) - 使用 Docker 部署常用的应用程序” 的 “8. 部署 Python”。
3. Python 开发工具
IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。
用 Python 语言进行程序开发,既可以用 Python 自带的 IDLE,也可以使用 PyCharm 或 Eclipse+PyDev 等作为 IDE。
1) PyCharm
PyCharm 由 JetBrains 公司开发的一款 Python 开发工具,在 Windows、Mac OS 和 Linux 操作系统中都可以使用。
PyCharm 具有语法高亮显示、Project(项目)管理代码跳转、智能提示、自动完成、调试、单元测试以及版本控制等一般开发工具都具有的功能,除此之外,它还支持 Django(Python 的 Web 开发框架)框架下进行 Web 开发。
PyCharm 开发工具可通过其官方网站下载获取。需要注意的是,该网站提供了 2 个版本,一个是社区版(免费并且提供源代码,适合多数读者),另一个是专业版(免费试用)。
PyCharm 官网:http://www.jetbrains.com/pycharm/
2) Eclipse + PyDev
Eclipse 是一个开源的、基于 Java 的可扩展开发平台,最初主要用于 Java 语言的开发。该平台可通过安装不同的插件,进行不同语言的开发。
PyDev 是一款功能强大的 Eclipse 插件,它可以提供语法高亮、语法分析、语法错误提示,以及大纲视图显示导入的类、库和函数、源代码内部的超链接、运行和调试等功能。
除此之外,还有 PythonWin(只针对 Win32 平台)、MacPython IDE(PythonWin 对应的 Mac 版本)、Emacs 和 Vim(功能强大的文本编辑器,可以用来编写 Python 程序)等,都可以作为执行 Python 程序的 IDE。
Eclipse+PyDev 的安装要比 PyCharm 复杂,大致分为以下 3 个步骤:
(1) 安装 JRE(Java 运行环境)或 JDK(Java 开发工具包),Eclipse 是基于 Java 的开发工具,必须有 Java 运行环境才能运行;
(2) 下载和安装 Eclipse;
(3) 安装 PyDev 插件,运行 Eclipse 后,在菜单 “Help->Install New Software”,在对话框的 Location 文本框中,输出 PyDev 插件的下载地址(http://pydev.org/updates)。
JDK: https://www.oracle.com/java/technologies/downloads/
Eclipse: https://www.eclipse.org/downloads/
PyDev 插件安装成功后,还需要设置 Python 解释器,具体步骤为:
(1) 打开 Eclipse,选择菜单 “Window -> Preferences”,弹回设置对话框;
(2) 选择 “PyDev -> Interpreters -> Python Interpreter”,这里可以通过点击 "Config first in PATH" 按钮,通过在 Path 路径中找到 Python 解释器,也可以点击 “Browse for Python/pypy exe” 按钮,手动找到 Python 解释器。添加完成后,点击 “Apply and Close” 按钮即可。
3) Visual Studio Code
Visual Studio Code,简称 VS Code,是微软公司开发的一款轻量级 IDE。和 PyCharm 一样,它也支持在 Windows、Linux 和 macOS 平台上运行。
VS Code:https://code.visualstudio.com/Download
VS Code 支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义热键、括号匹配等功能,支持使用插件进行功能扩展,还针对网页开发和云端应用开发做了优化。
值得一提的是,使用 VS Code 编写 Python 代码,无需向其它编译器那样,通过创建项目来管理源代码文件,在 VS Code 中可以直接创建 Python 源代码文件。
VS Code 安装 Python 扩展的方法:
(1) 在 Welcome 界面中选择 "Python",下方会弹出一个对话框,选择 "OK",即可完成 Python 扩展的安装;
(2) 点击 “扩展” 按钮,并搜索 Python 扩展插件,找到合适的扩展(这里选择的是第一个,这是 Python 的调试工具),选择 “Install” 即可安装成功。
4)Sublime Text
Sublime Text 是一款流行的文本编辑器,它体积小、运行速度快、文本功能强大、可以运行在 Windows、Linux 和 Mac OS X 平台上。
在程序员眼里,Sublime Text 还是一款非常好用的代码编辑器,它支持运行 C/C++、Python、Java 等多种语言编写的程序。
Sublime Text: https://www.sublimetext.com/
4. Pip 管理工具
pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。第三方包也可以在 https://pypi.org/ 中查找。
Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。本文使用 Windows 10 下的 Python 3.8.5 演示 pip 命令的使用方式。
C:\> pip --version
pip 24.2 from c:\users\admin\appdata\local\programs\python\python38\lib\site-packages\pip (python 3.8)
可以使用如下命令,指定 pip 版本:
C:\> python -m pip install --force-reinstall pip==19.1
1) 配置 pip 源
下载安装 python 第三方库会较慢,所以需要设置 pip 源以便快速下载,常用的国内源如下。
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
命令行中使用,以 numpy 为例,在后面加 -i 源链接。
pip install numpy -i http://mirrors.aliyun.com/pypi/simple/
在 C:\Users\tkuang\AppData\Roaming\pip 目录下创建 pip.ini,内容如下。
[global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
注:Linux/Mac OS 环境中,配置文件位置在 ~/.pip/pip.conf(如果不存在创建该目录和文件)
使用 pip config list 命令查看:
C:\> pip config list
global.index-url='https://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'
2) pip 命令
# 查看本地已安装的包
C:\> pip list
Package Version ------------------- ----------- bcrypt 4.1.3 beautifulsoup4 4.12.3 certifi 2024.2.2 cffi 1.16.0 charset-normalizer 3.3.2 contourpy 1.1.1 cryptography 42.0.7 cycler 0.12.1 distlib 0.3.8 ...
# 安装包,但是包已经存在
C:\> pip install numpy
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Requirement already satisfied: numpy in c:\applications\python-3.8.1\lib\site-packages (1.23.3)
# 卸载包
C:\> pip uninstall numpy
Found existing installation: numpy 1.23.3 Uninstalling numpy-1.23.3: Would remove: c:\applications\python-3.8.1\lib\site-packages\numpy-1.23.3.dist-info\* c:\applications\python-3.8.1\lib\site-packages\numpy\* c:\applications\python-3.8.1\scripts\f2py.exe Proceed (Y/n)? y Successfully uninstalled numpy-1.23.3
# 查看包的可安装版本
C:\> pip install requests==
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement requests== (from versions: 0.2.0, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8, 0.8.9, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.6, 0.10.7, 0.10.8, 0.11.1, 0.11.2, 0.12.0, 0.12.1, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.13.5, 0.13.6, 0.13.7, 0.13.8, 0.13.9, 0.14.0, 0.14.1, 0.14.2, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 2.3.0, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.9.1, 2.9.2, 2.10.0, 2.11.0, 2.11.1, 2.12.0, 2.12.1, 2.12.2, 2.12.3, 2.12.4, 2.12.5, 2.13.0, 2.14.0, 2.14.1, 2.14.2, 2.15.1, 2.16.0, 2.16.1, 2.16.2, 2.16.3, 2.16.4, 2.16.5, 2.17.0, 2.17.1, 2.17.2, 2.17.3, 2.18.0, 2.18.1, 2.18.2, 2.18.3, 2.18.4, 2.19.0, 2.19.1, 2.20.0, 2.20.1, 2.21.0, 2.22.0, 2.23.0, 2.24.0, 2.25.0, 2.25.1, 2.26.0, 2.27.0, 2.27.1, 2.28.0, 2.28.1) ERROR: No matching distribution found for requests==
5. Python 虚拟环境
1) Python 环境
在搞清楚什么是 Python 虚拟环境,首先要清楚 Python 环境指的是什么。Python 环境主要包括以下内容:
(1) 解释器 python.exe
C:\Users\admin> python
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
注:在 Windows 的命令行窗口内,运行 python 命令 进入 Python 交互模式,可以在 >>> 符后输入 Python 代码交互运行。
(2) Lib 目录
> 标准库
> site-pakages目录,默认安装第三方库所在的目录
(3) Scripts目录,包含一些执行文件
包管理工具 pip.exe
打包工具 pyinstaller.exe(需要自己安装)
...
(4) 其它
主要包括 Python 解释器运行时需要的相关依赖文件,文档说明等
Python 环境主要由运行 Python 解释器和它所处的环境决定。
2) 什么是 Python 虚拟环境
搞清楚了什么是 Python 环境,思考下为什么有 Python 虚拟环境的说法。思考以下问题:
(1) 有两个项目 A 和 B,如果 A 和 B 都要用到某一模块,但版本不相同怎么办?
(2) 在使用 Pip 安装包时,比如安装 C 包,C 包如果依赖 D 包,Pip 会自动安装 D 包。但当我们用 Pip 移除 C 包时,却只移除了 C 包,不会移除 D 包。此时 D 包变成了无主或无用的包(浪费电脑存储空间)。
为了解决上面的问题,Python 使用了虚拟环境这个概念,可以认为是 Python 环境的多个副本,只是在不同的副本中安装了不同的包。虚拟环境中一般不包含标准库,不包含 Python 解释器运行时所需的依赖文件。
当然,管理虚拟环境离不开虚拟环境管理工具,下面列出了一些常用的工具:
(1) virtualenv
virtualenv 是非常流行的 Python 虚拟环境配置工具。它不仅同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。virtualenv 能够很好的完成虚拟环境的搭建和 Python 版本的管理,但是跨平台的使用不太一致,且有时候处理包之间的依赖经常存在问题。
(2) venv
Python 从 3.3 版本开始,自带了一个虚拟环境模块 venv,关于该模块的详细介绍,可参考 PEP-405。它的很多操作都和 virtualenv 类似。如果你使用的是 Python3.3 之前版本或者是 Python2,则不能使用该功能,依赖需要利用 virtualenv 进行虚拟环境管理
(3) pipenv
pipenv 是 Kenneth Reitz (requests 的作者) 的作品。它结合了 Pipfile,pip 和 virtualenv,能够有效管理 Python 多个环境,各种包。Pipfile 是社区拟定的依赖管理文件,用于替代过于简陋的 requirements.txt 文件。Pipfile 文件是 TOML 格式而不是 requirements.txt 这样的纯文本。pipenv 相当于 virtualenv 和 pip 的合体,且功能更多。
(4) conda
支持 Python、R、Java、JavaScript、C 等多种开发语言的包、依赖和环境管理工具,能运行在 Windows、MacOS、Linux 多个平台,可以在本地轻松创建、保存、切换环境。当安装 anaconda 时,会自动安装 conda 工具。
conda 与 pipenv、venv 的区别:conda 虚拟环境是独立于操作系统 Python 环境的,即无论操作系统下 Python 是什么版本(哪怕2.7),也可以指定虚拟环境 Python 版本为 3.6,而 venv 和 pipenv 是依赖操作系统 Python 环境的。
(5) Python Launcher for Windows
Python 从 3.3 版本开始,在 Windows 系统中自带了一个 py.exe 启动工具。如果你是使用 Python.org 官网下载的安装包安装的 Python 3.3(或更新版本)环境,那么可以直接在命令提示符中使用这个工具( 在 Windows中,py.exe 会安装在 C:\Windows 目录)。
py 可以打开默认的 Python 提示符; py -2.7 和 py -3 打开对应的 Python 版本,py -0 将列出系统中安装了哪些版本的 Python。
注:pipenv 是依赖操作系统 Python 环境的, 使用 pipenv 时如果要支持多个 Python 版本的虚拟环境,我们可以使用 pyenv 或 asdf 等 Python 版本管理工具。pyenv 主要针对 Python 版本管理,是一个专门用于管理Python版本的工具。asdf 是一个更通用的版本管理工具,支持管理多种编程语言的版本,包括 Node.js、Ruby、Elixir、Erlang 等。
3) pipenv
本文以 Windows 环境为例,介绍如何安装 pipenv 和 pipenv 的一些基本的使用方法。当前 Windows 环境,只安装了一个 Python 版本 3.8.5,pipenv 只能创建基于 Python 3.8 的虚拟环境。
(1) 安装 pipenv
可以使用如下命令安装 pipenv:
C:\> pip install pipenv ... C:\> pipenv --version pipenv, version 2024.0.1 C:\> pipenv -h Usage: pipenv [OPTIONS] COMMAND [ARGS]... Options: --where Output project home information. --venv Output virtualenv information. --py Output Python interpreter information. ...
(2) 创建虚拟环境
新建 C:\pipenv_demo 目录,并进入目录:
C:\pipenv_demo>
创建 Python 3.8 虚拟环境,运行如下命令:
C:\pipenv_demo> pipenv install --python 3.8
Virtualenv already exists! Removing existing virtualenv... Creating a virtualenv for this project... Pipfile: C:\pipenv_demo\Pipfile Using c:/users/admin/appdata/local/programs/python/python38/python.exe (3.8.5) to create virtualenv... [ =] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 389ms creator CPython3Windows(dest=C:\pipenv_demo\.venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv) added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0 activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator Successfully created virtual environment! Virtualenv location: C:\pipenv_demo\.venv Pipfile.lock not found, creating... Locking [dev-packages] dependencies... Locking [packages] dependencies... Updated Pipfile.lock (db4242)! Installing dependencies from Pipfile.lock (db4242)... ================================ 0/0 - 00:00:00 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run.
注:pipenv install 不带参数,安装系统的默认 Python 版本。--python 后面跟的参数可以不是版本号,而是已安装的 python.exe 的路径。
C:\pipenv_demo> ls
目录: C:\pipenv_demo Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2024/8/17 9:29 .venv -a---- 2024/8/17 8:18 138 Pipfile -a---- 2024/8/17 9:29 453 Pipfile.lock
注:pipenv install --python 命令运行后自动创建了 Pipfile、Pipfile.lock 和 .venv 文件夹,.venv 就是虚拟环境所在目录。Pipfile 里的 source.url 默认是 https://pypi.org/simple,最好把它改成国内的 pip 源,这里改成了阿里源 https://mirrors.aliyun.com/pypi/simple 。
查看虚拟环境相关信息:
# 工程根目录信息 C:\pipenv_demo> pipenv --where C:\pipenv_demo # 当前虚拟环境的信息 C:\pipenv_demo> pipenv --venv C:\pipenv_demo\.venv # Python 解释器的信息 C:\pipenv_demo> pipenv --py C:\pipenv_demo\.venv\Scripts\python.exe # 环境变量选项 C:\pipenv_demo> pipenv --envs ...
(3) 不激活虚拟环境
查看虚拟环境的包列表:
C:\pipenv_demo> pipenv run pip -V pip 24.1.2 from C:\pipenv_demo\.venv\lib\site-packages\pip (python 3.8) C:\pipenv_demo> pipenv run pip list Package Version ---------- ------- pip 24.1.2 setuptools 71.0.4 wheel 0.43.0
安装/卸载 numpy 包:
C:\pipenv_demo> pipenv install numpy Installing numpy... Resolving numpy... Added numpy to Pipfile's [packages] ... Installation Succeeded Pipfile.lock (8d041a) out of date: run `pipfile lock` to update to (04f6d8)... Running $ pipenv lock then $ pipenv sync. Locking [packages] dependencies... Building requirements... Resolving dependencies... Success! Locking [dev-packages] dependencies... Updated Pipfile.lock (5a1e43bd1c0b1a49d7de8a7bd4f2d47edb726caac1733023f7d173c88f04f6d8)! To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. Installing dependencies from Pipfile.lock (04f6d8)... All dependencies are now up-to-date! To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. Installing dependencies from Pipfile.lock (04f6d8)... 注:使用 pipenv install 命令会在 Pipfile 文件的 [packages] 下添加一行 numpy = "*"。使用 pipenv run pip install numpy 命令,则不会将 numpy = "*" 写入 Pipfile。 C:\pipenv_demo> pipenv run pip list Package Version ---------- ------- numpy 1.24.4 pip 24.1.2 setuptools 71.0.4 wheel 0.43.0 C:\pipenv_demo> pipenv uninstall numpy Removed numpy from Pipfile. Uninstalling numpy... Found existing installation: numpy 1.24.4 Uninstalling numpy-1.24.4: Successfully uninstalled numpy-1.24.4
(4) 激活虚拟环境
激活虚拟环境,运行如下命令:
C:\pipenv_demo> pipenv shell
Launching subshell in virtual environment... Windows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。 尝试新的跨平台 PowerShell https://aka.ms/pscore6
查看虚拟环境的包列表:
C:\pipenv_demo> pip -V pip 24.1.2 from C:\pipenv_demo\.venv\lib\site-packages\pip (python 3.8) C:\pipenv_demo> pip list Package Version ---------- ------- pip 24.1.2 setuptools 71.0.4 wheel 0.43.0
安装/卸载 numpy 包 (在虚拟环境中):
C:\pipenv_demo> pipenv install numpy Installing numpy... Resolving numpy... Added numpy to Pipfile's [packages] ... Installation Succeeded Pipfile.lock (8d041a) out of date: run `pipfile lock` to update to (04f6d8)... Running $ pipenv lock then $ pipenv sync. Locking [packages] dependencies... Building requirements... Resolving dependencies... Success! Locking [dev-packages] dependencies... Updated Pipfile.lock (5a1e43bd1c0b1a49d7de8a7bd4f2d47edb726caac1733023f7d173c88f04f6d8)! Installing dependencies from Pipfile.lock (04f6d8)... All dependencies are now up-to-date! Installing dependencies from Pipfile.lock (04f6d8)... 注:使用 pipenv install 命令会在 Pipfile 文件的 [packages] 下添加一行 numpy = "*"。 使用 pip install 命令,则不会将 numpy = "*" 写入 Pipfile。 C:\pipenv_demo> pip list Package Version ---------- ------- numpy 1.24.4 pip 24.1.2 setuptools 71.0.4 wheel 0.43.0 这里不卸载 numpy,在虚拟环境中卸载 numpy 的命令也是 pipenv uninstall numpy。
退出虚拟环境,运行如下命令:
C:\pipenv_demo> exit
(5) 恢复/复制虚拟环境
生成 requirements.txt:
C:\pipenv_demo> pipenv requirements > requirements.txt
...
删除虚拟环境:
C:\pipenv_demo> pipenv --rm
Removing virtualenv (C:\pipenv_demo\.venv)...
注:.venv 目录被删除了,但 Pipfile.lock、 Pipfile、requirements.txt 依然存在。
通过 Pipfile 恢复虚拟环境:
C:\pipenv_demo> pipenv install
Creating a virtualenv for this project... Pipfile: C:\pipenv_demo\Pipfile Using C:/Users/admin/AppData/Local/Programs/Python/Python38/python.exe (3.8.5) to create virtualenv... [ ] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 409ms creator CPython3Windows(dest=C:\pipenv_demo\.venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv) added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0 activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator Successfully created virtual environment! Virtualenv location: C:\pipenv_demo\.venv To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. Installing dependencies from Pipfile.lock (04f6d8)...
通过 requirements.txt 恢复/复制虚拟环境,新建 C:\pipenv_demo2 目录,把 requirements.txt 复制到新目录,并进入该目录:
C:\pipenv_demo2> pipenv run pip install -r requirements.txt
Creating a virtualenv for this project... Pipfile: C:\pipenv_demo2\Pipfile Using default python from c:\users\admin\appdata\local\programs\python\python38\python.exe (3.8.5) to create virtualenv... [ =] Creating virtual environment...created virtual environment CPython3.8.5.final.0-64 in 409ms creator CPython3Windows(dest=C:\pipenv_demo2\.venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\admin\AppData\Local\pypa\virtualenv) added seed packages: pip==24.1.2, setuptools==71.0.4, wheel==0.43.0 activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator Successfully created virtual environment! Virtualenv location: C:\pipenv_demo2\.venv requirements.txt found in C:\pipenv_demo2 instead of Pipfile! Converting... Failed... Warning: Your Pipfile now contains pinned versions, if your requirements.txt did. We recommend updating your Pipfile to specify the "*" version, instead. Looking in indexes: https://mirrors.aliyun.com/pypi/simple/ Collecting numpy==1.24.4 (from -r requirements.txt (line 2)) Using cached https://mirrors.aliyun.com/pypi/packages/69/65/0d47953afa0ad569d12de5f65d964321c208492064c38fe3b0b9744f8d44/numpy-1.24.4-cp38-cp38-win_amd64.whl (14.9 MB) Installing collected packages: numpy Successfully installed numpy-1.24.4
以上命令执行后,目录下会自动生成 Pipfile 文件,可以运行 pipenv lock (或 pipenv update) 命令生成 Pipfile.lock 文件。
(6) 运行脚本或命令
在 C:\pipenv_demo 目录下,创建一个 Python 文件 test.py, 代码如下:
#!/usr/bin/python3
print('Hello World - test.py')
进入 C:\pipenv_demo 目录,运行如下命令:
C:\pipenv_demo> pipenv run python test.py
Hello World - test.py
修改 C:\pipenv_demo\Pipfile 文件,在文件末尾添加如下内容:
[scripts]
hello = "python -c \"print('Hello World - hello')\""
piplist = "pip list"
运行如下命令:
C:\pipenv_demo> pipenv run hello Hello World - hello C:\pipenv_demo> pipenv run piplist Package Version ---------- ------- numpy 1.24.4 pip 24.1.2 setuptools 71.0.4 wheel 0.43.0
Python 虚拟环境的本质是修改了 sys.path 的值,可以查看 Python 虚拟环境和 Python 主环境中的 sys.path 值。
C:\pipenv_demo>python Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from pprint import pprint >>> import sys >>> pprint(sys.path) ['', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\DLLs', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages'] C:\pipenv_demo>pipenv run python Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from pprint import pprint >>> import sys >>> pprint(sys.path) ['', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\DLLs', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38\\lib', 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38', 'C:\\pipenv_demo\\.venv', 'C:\\pipenv_demo\\.venv\\lib\\site-packages']
本系列文章资料参考来源:
1. http://c.biancheng.net/python/
2. https://www.runoob.com/python3/python3-tutorial.html
3. https://www.python.org/